我想multimap
在 C++ 中设置如下:
multimap<pair<string, string>, vector<double> > mmList;
但是我怎样才能将数据插入其中呢?我尝试了以下代码,但无法编译:
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
我想multimap
在 C++ 中设置如下:
multimap<pair<string, string>, vector<double> > mmList;
但是我怎样才能将数据插入其中呢?我尝试了以下代码,但无法编译:
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
您可以使用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));
从C++11开始,与harpun 的答案相比,您可以使用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);
上面的代码不仅更短,而且更高效,因为它减少了不必要的std::pair
构造函数调用次数。为了进一步提高效率,您可以使用专门针对您的用例引入的piecewise_construct
构造函数:std::pair
mmList.emplace(std::piecewise_construct,
std::forward_as_tuple("a", "b"),
std::forward_as_tuple(test));
这段代码不再更短,但不会调用不必要的构造函数。对象是直接在std::multimap
给定参数中创建的。
这是示例:
std::multimap<std::string,std::string> Uri_SessionId_Map;
std::string uri = "http";
std::string sessId = "1001";
std::pair<std::string,std::string> myPair(uri,sessId);
Uri_SessionId_Map.insert(myPair);
只是为了提高可读性而拆分了几行。您可以了解如何制作配对。pair 必须具有与 multimap 相同的模板化形式。