【发布时间】:2014-06-29 18:44:13
【问题描述】:
如果我有一个std::multimap<int, std::map<int, MyClass>> myMultimap,我如何将一个类对象MyClassA 插入到映射中,其值为1,多映射值2?
看起来我可以在 c++11 中执行 myMultimap.at(2).insert(std::pair<1,MyClassA>);,但由于库回归/不可比性超出我的控制范围,我正在使用 c++98。
我也试过了
myMultimap[2].insert(
std::make_pair(
myMultimap[2].end(),
myClassA
)
);
这给出了:error: no match for ‘operator[]’ (operand types are ‘std::multimap<int, std::map<int, ns_namespace::MyClassType> >’ and ‘int’)| 用于 [...]'s。
我不想做类似myMultimap.insert(std::make_pair(2,std::make_pair(1,MyClassA))) 这样的事情
因为如果我理解正确,这将在多图中创建一个新地图,而不是将类对象分配给多图中的现有地图。
【问题讨论】:
-
multimap和at/[]没有意义。想想看。好好想想吧。 -
使用多重映射,您可以拥有多个键值为 2 的条目。其中哪一个具有您要在其中插入对象的映射?这就是问题——决定!
-
我想这是有道理的。有没有办法做类似于 .at() 但使用迭代器的事情? (另外,我刚刚意识到 C++11 添加了 .at 到地图,而不是多地图,哎呀)
-
比如.find(3)返回一个迭代器,然后用它来访问map?
-
一张地图可能已经是错误的方向了! Tes,您可以使用这样的数据结构,但它们不太可能特别有用。我猜,由一对整数索引的地图更合适。