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

C++ 插入std::Map(C+;+;)的std::Multimap,c++,map,stl,insert,C++,Map,Stl,Insert,如果我有一个std::multimap myMultimap如何在multimap value2处插入值为1的类对象MyClassA 看起来我可以做myMultimap.at(2).insert(std::pair)在c++11中,但我使用c++98,因为我无法控制库的回归/不兼容性 我也试过了 myMultimap[2].insert( std::make_pair( myMultimap[2].end(),

如果我有一个
std::multimap myMultimap
如何在multimap value
2
处插入值为
1
的类对象
MyClassA

看起来我可以做
myMultimap.at(2).insert(std::pair)在c++11中,但我使用c++98,因为我无法控制库的回归/不兼容性

我也试过了

myMultimap[2].insert(
            std::make_pair(
                myMultimap[2].end(),
                myClassA
            )
        );
它给出:
错误:与“运算符[]”不匹配(操作数类型为“std::multimap”和“int”)|
用于这两个
[
..
]

我不想做类似
myMultimap.insert(std::make_-pair(2,std::make_-pair(1,MyClassA))的事情)

因为如果我理解正确,这将在多重映射中创建一个新映射,而不是将类对象指定给多重映射中的现有映射。

这是一个两阶段的过程:

  • 在外部地图中找到要对内部地图执行操作的位置。如有必要,请插入新元素
  • 使用适当的值更新内部映射
  • 我不知道为什么外部映射使用多重映射(它们很少有用),所以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;
    
    autoit=mymultimap.下限(2);
    if(it==mymultimap.end()|| it->first!=2){
    it=mymultimap.insert(
    std::make_pair(2,std::map())。首先;
    }
    (*it)[1]=MyClassA;
    

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

    multimap
    at
    /
    []
    没有意义。想想看。仔细想想。使用多重映射,您可以有多个键值为2的条目。其中哪一个具有要插入对象的贴图?这就是问题所在——决定!我想这是有道理的。是否有一种类似于.at()但使用迭代器的方法?(另外,我刚刚意识到C++11添加了.at to map,而不是multimap,哎呀)例如.find(3)返回一个迭代器,然后使用它访问映射?映射的映射可能已经是错误的方向了!当然,您可以使用这样的数据结构,但它们不太可能特别有用。我想,由一对整数索引的映射更适合。