C++如何在multimap中插入?

and*_*oer 13 c++ containers dictionary insert multimap

我想在C++中设置一个多图:

multimap<pair<string, string>, vector<double> > mmList;
Run Code Online (Sandbox Code Playgroud)

但是如何插入数据:

mmList.insert(pair<string, string>, vector<double>("a", "b", test));
Run Code Online (Sandbox Code Playgroud)

har*_*pun 19

您可以使用构造对std::make_pair(a, b).通常,您可以将对插入到地图/多图中.在你的情况下,你必须构造一个由字符串对和向量组成的对:

    std::multimap<std::pair<std::string, std::string>, std::vector<double> > mmList;

    std::vector<double> vec;
    mmList.insert(std::make_pair(std::make_pair("a","b"), vec));
Run Code Online (Sandbox Code Playgroud)


hon*_*onk 5

harpun 的答案相比,从C++11 开始,您可以使用它std::multimap::emplace()来摆脱一个:std::make_pair()

std::multimap<std::pair<std::string, std::string>, std::vector<double>> mmList;
std::vector<double> test = { 1.1, 2.2, 3.3 };
mmList.emplace(std::make_pair("a", "b"), test);
Run Code Online (Sandbox Code Playgroud)

上面的代码不仅更短,而且更高效,因为它减少了不必要的std::pair构造函数调用次数。为了进一步提高效率,您可以使用 的piecewise_construct构造函数std::pair,它是专门为您的用例引入的:

mmList.emplace(std::piecewise_construct,
    std::forward_as_tuple("a", "b"),
    std::forward_as_tuple(test));
Run Code Online (Sandbox Code Playgroud)

此代码不再更短,但具有不会调用不必要的构造函数的效果。对象是直接在std::multimap给定参数中创建的。

Ideone 上的代码