如何插入map<double, multimap<int, Object*> >
?
我试过了mymap.insert(make_pair(double, make_pair(int, Object*)));
。此外,如何在迭代时访问Object*
?
我试过it->second->second
。
答案 0 :(得分:2)
你似乎想要:
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*>
。
答案 1 :(得分:2)
在export default class Struct {
static get default () {
return Struct
}
...
}
中,第二个值是单个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
。< / p>
Object*
如果您使用ranged-based for
loop代替:
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;
}