当前位置: 首页 > 知识库问答 >
问题:

当同时迭代两个映射时,模板参数推导/替换失败

盛浩阔
2023-03-14

我试图使用一对两个迭代器同时迭代两个无序映射。如果我们迭代两个向量,这种方法可以很好地工作;

#include <iostream>
#include<unordered_map>
using namespace std;

int main() 
{ 
    std::unordered_map<std::string,double> mypantry = {{"flour",1.5}};
    std::unordered_map<std::string, int> dubVec = {{"key", 5}};
    std::unordered_map<std::string, std::string> intVec = {"key", "name"};
    double result = 0;

    typedef std::unordered_map<std::string, std::string>::iterator intIter;
    typedef std::unordered_map<std::string, bool>::iterator dubIter;

    for (std::pair<intIter, dubIter> i(intVec.begin(), dubVec.begin());
     i.first != intVec.end() && i.second != dubVec.end();
     ++i.first, ++i.second)
    {
        cout << i.first.first << "\n" << i.first.second << "\n" << i.second.second;
    }
    return 0; 
}

掠夺。cpp:在函数“int main()”中:prog。cpp:18:70:错误:调用'std::pair,std::_ cx11::basic_string时没有匹配函数

::对(std::无序_ map,std::_cx11::基本_string

共有1个答案

唐默
2023-03-14

您的代码中有几个输入错误:

std::unordered_map<std::string, std::string> intVec = {"key", "name"};

应该是:

std::unordered_map<std::string, std::string> intVec = {{"key", "name"}};
//                    notice additional curly brackets ^             ^

以前,您尝试使用一对 const char[] 来初始化地图,但现在您使用单个键值对对其进行初始化。

typedef std::unordered_map<std::string, bool>::iterator dubIter;

应该是:

typedef std::unordered_map<std::string, int>::iterator dubIter;

以前,< code>dubIter是string-bool条目的无序映射的迭代器的< code>typedef,但是在< code>dubVec中有string-int条目。

cout << i.first.first << "\n" << i.first.second << "\n" << i.second.second;

应该是:

cout << i.first->first << "\n" << i.first->second << "\n" << i.second->second;
// notice here ^^                        ^^                          ^^

i是一对std::迭代器。它的<code>第一个</code>和<code>第二个</code>成员是迭代器。迭代器到键值对。要访问这些对的元素,您必须首先取消对迭代器的引用,或者使用-

 类似资料:
  • 我正在尝试编写一个简单的模板,我可以使用该模板对带有单个参数的函数进行记忆: 但我得到了一个错误: 错误:没有匹配函数来调用“备忘录(双精度)” 注:候选人是: 注意:模板OUT记忆(IN) 注意:模板参数扣除/替换失败: 为什么编译失败? 实际上,当我指定所有模板参数时,我不明白为什么模板参数推导/替换会发生。 我使用的是gcc版本4.7.2(未启用C 11) PS:模板的错误比我最初意识到的要

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!

  • 问题内容: 我有两个数组,一个带有url,一个带有内容。他们看起来像这样: 如何同时映射两个数组,并在新创建的元素中使用它们的值? 我需要使用我的reactplayer的url值和内容的值作为播放器下方的文本。 所以它应该看起来像这样: 这可能吗?更好的设置方法是什么? 问题答案: 使用的第二个参数(即当前元素的索引),可以访问第二个数组的正确元素。 如果您的项目中有其中一种库,那么这是该库中各种

  • 我已经编写了一个具有递归评估的可变参数模板函数。对于最后一个参数,我在没有可变参数包的情况下实现了专业化,并且一切正常。 现在我想把可变函数参数转换成模板参数。 这是我的尝试: gcc和clang报告了一个模糊的过载,并且无法使用空参数包在“专业化”和“可变参数”之间做出决定。 我尝试删除特化并检查可变参数模板中的包大小,但是如果没有特化,编译器就无法推断出参数“p”。

  • 在模板成员函数中使用std::function时出现编译错误,下面的代码是一个简单的示例: 我用的是C++11和G++4.7

  • N4527 14.8.2.4[温度扣除部分] 3用于确定排序的类型取决于进行部分排序的上下文: (3.1)-在函数调用的上下文中,使用的类型是那些函数调用具有参数的函数参数类型。 (3.2)-在调用转换函数的上下文中,使用转换函数模板的返回类型。 (3.3)-在其他上下文(14.5.6.2)中使用函数模板的函数类型。 4以上从参数模板中指定的每种类型以及从参数模板中指定的相应类型都用作P和A的类型