C++插入到地图<双精度、多地图<整数、对象*>>
C++ inserting into a map<double, multimap<int, Object*>>
一个人如何插入map<double, multimap<int, Object*> >
?我尝试了mymap.insert(make_pair(double, make_pair(int, Object*)));
。此外,在迭代时如何访问Object*
?我尝试了it->second->second
。
您似乎想要:
using MyMap = std::map<double, std::multimap<int, Object*> >;
MyMap mymap;
mymap.insert(std::make_pair(dbl, std::multimap<int, Object*>());
枚举:
#include <iostream>
#include <map>
struct Object {};
int main()
{
using MyMap = std::map<double, std::multimap<int, Object*> >;
MyMap mymap;
auto ins = mymap.insert(std::make_pair(42.0, std::multimap<int, Object*>()));
Object obj1, obj2;
ins.first->second.insert(std::make_pair(7, &obj1));
ins.first->second.insert(std::make_pair(7, &obj2));
for (auto const& pr : mymap)
{
std::cout << "dblkey: " << pr.first << 'n';
for (auto const& pr2 : pr.second)
{
std::cout << "tintkey: "<< pr2.first
<< ", value: " << static_cast<const void*>(pr2.second) << 'n';
}
}
}
输出(显然,指针值变化)
dblkey: 42
intkey: 7, value: 0x7fff5fbff160
intkey: 7, value: 0x7fff5fbff158
最后,您的问题比其他任何问题都重要。您正在尝试将std::pair<int, Object*>
插入std::multimap<int, Object*>
实例属于。
在std::map<double, std::multimap<int, Object*> >
中,第二个值是一个std::multimap
对象,但是您试图将其设置为std::pair
对象。std::multimap
没有接受std::pair
作为输入的构造函数,这就是您的代码失败的原因。
您需要构造一个std::multimap
对象以插入std::map
,例如:
double d = ...;
int i = ...;
Object *obj = ...;
std::multimap mm;
mm.insert(std::make_pair(i, obj));
mymap.insert(std::make_pair(d, mm));
或:
mymap[d].insert(std::make_pair(i, obj));
迭代std::map
时,它将返回迭代器到std::pair
,其中->first
为double
,->second
为std::multimap<int, Object*>
。
迭代std::multimap
时,它将返回迭代器到std::pair
,其中->first
为int
,->second
为Object*
。
auto iter1 = mymap.begin;
while (iter1 != mymap.end())
{
auto &mm = iter1->second; // mm = std::multimap<int, Object*>
auto iter2 = mm.begin();
while (iter2 != mm.end())
{
auto obj = iter2->second; // obj = Object*
// use obj as needed...
++iter2;
}
++iter1;
}
如果您使用基于远程的for
循环,这将更简单:
for (auto &v1: mymap) // v1 = std::pair<double, std::multimap<int, Object*> >
{
auto &mm = v1.second; // mm = std::multimap<int, Object*>
for (auto &v2: mm) // v2 = std::pair<int, Object*>
{
auto obj = v2.second; // obj = Object*
// use obj as needed...
}
}
相关文章:
- 请解释这句话(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中