它无法将 c++ 映射结构编译为 map<A、pair<B、C> >
It fails to compile a c++ map structure as map<A, pair<B, C> >
我有一个带有 stl map 的 c++ 代码,第二个参数定义为一对
int keys[10] = {1, 1, 1, 2, 3, 4, 5, 7, 6, 6};
char s[5];
map< unsigned int, pair<string, int> > tmpMap;
for (int i=0; i<10; i++)
{
if (tmpMap.find(keys[i])==tmpMap.end())
{
sprintf(s, "%i", keys[i]);
tmpMap.insert(make_pair(keys[i], make_pair(s, 1)));
}
else tmpMap[keys[i]].second++;
}
for (map< unsigned int, pair<string, int> >::iterator it=tmpMap.begin(); it!=tmpMap.end(); ++it)
{
cout << (*it).first << " " << (*it).second << endl;
}
但它无法编译,它说,没有匹配运算符<<。但是(*it).first和(*it).second只是字符串和int,为什么它不起作用?
这不是真的,first
是一个unsigned int
,而second
是一个pair<string,int>
,因为映射的迭代器不会直接给你一对,而是给你一对键,值。
我想你应该这样做
pair<string,int> pair = (*it).second;
cout << pair.first << " " << pair.second << endl;
你的(*it).second是一对,你需要有
cout << (*it).first << " " << (*it).second.first << " " <<
(*it).second.first << endl;
这是因为在遍历地图时,你会得到对,然后第一个是键,第二个是值 - 在你的例子中也是一对。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中