为什么从std :: map插入不想更新?[C++]

The*_* do 5 c++ map

我试图将相同的键多次插入到地图中但具有不同的值.它不起作用.我知道operator []做了这个工作,但我的问题是,如果插入的这种行为是正确的吗?不应该插入()插入?我不知道标准是什么.不幸的是我没有它(标准的C++)所以我无法检查.
谢谢你有用的ansers.

Lau*_*nis 14

如果要插入具有不同值的相同键,则需要std::multimap使用.

std::map::insert如果密钥已存在,则不会执行任何操作.在std::map::operator[]将覆盖旧值.

对于STL参考,你不需要C++标准本身; 像http://www.cplusplus.com/reference/这样的东西也会这样做.


GMa*_*ckG 5

我不确定我完全理解,但听起来你在覆盖地图上的先前条目; A 每个键map只存储一个值.

相反,你需要使用multi_map.这将允许您插入具有不同值的相同键.你确实失去了operator[]这种方式,因为它不会有意义.(当插入时,确定,但该操作符也会检索.它应该检索哪个值?)

这是一个例子(从这里修改):

#include <iostream>
#include <map>

int main(void)
{
    std::multimap<std::string, int> m;

    m.insert(std::make_pair("a", 1));
    m.insert(std::make_pair("b", 2));
    m.insert(std::make_pair("c", 3));
    m.insert(std::make_pair("a", 4));
    m.insert(std::make_pair("b", 5));
    m.insert(std::make_pair("a", 6));

    std::cout << "Number of elements with key a: " << m.count("a") << endl;
    std::cout << "Number of elements with key b: " << m.count("b") << endl;
    std::cout << "Number of elements with key c: " << m.count("c") << endl;

    std::cout << "Elements in m: " << endl;
    for (m::iterator it = m.begin(); it != m.end(); ++it)
    {
        std::cout << "  [" << it->first << ", " << it->second << "]" << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)