插入std :: Map的std :: Multimap(C ++)

时间:2014-06-29 18:44:14

标签: c++ map stl insert

如果我有一个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’)| ... [&#39>提供]

我不想做myMultimap.insert(std::make_pair(2,std::make_pair(1,MyClassA)))之类的事情 因为如果我理解正确的话,这会在多图中创建一个新的地图,而不是将类对象分配给多图中的现有地图。

1 个答案:

答案 0 :(得分:0)

这是一个两阶段的过程:

  1. 在外部地图中找到您要对内部地图执行某些操作的位置。如有必要,请插入新元素。
  2. 使用适当的值更新内部地图。
  3. 我不知道为什么外部地图使用多图(​​它们很少有用)所以exampke只使用第一个条目:

    auto it = mymultimap.lower_bound(2);
    if (it == mymultimap.end() || it->first != 2) {
        it = mymultimap.insert(
            std::make_pair(2, std::map<int, MyClass>())).first;
    }
    (*it)[1] = MyClassA;
    

    (在移动设备上输入:可能存在拼写错误,但总体方法应该有效)。