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)
与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给定参数中创建的。