我想在C++中设置一个multimap
,如下所示:
multimap<pair<string, string>, vector<double> > mmList;
但是我怎么往里面插入数据呢?我尝试了下面的代码,但它无法编译:
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
我想在C++中设置一个multimap
,如下所示:
multimap<pair<string, string>, vector<double> > mmList;
但是我怎么往里面插入数据呢?我尝试了下面的代码,但它无法编译:
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
std::make_pair(a, b)
构建一对。通常你可以将一对插入到映射/多重映射中。在你的情况下,你需要构建一个由字符串对和向量组成的配对:
你可以使用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 起,您可以使用 std::multimap::emplace()
来代替一个 std::make_pair()
,相比于 harpun的答案:
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
构造函数调用次数。
为了进一步提高效率,您可以使用 std::pair
的 piecewise_construct
构造函数,该构造函数专门针对您的用例进行了引入: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)。pair必须与multimap具有相同的模板形式。