15

我想multimap在 C++ 中设置如下:

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

但是我怎样才能将数据插入其中呢?我尝试了以下代码,但无法编译:

mmList.insert(pair<string, string>, vector<double>("a", "b", test));
4

3 回答 3

20

您可以使用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));
于 2013-01-26T15:25:49.377 回答
5

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

Ideone 上的代码

于 2019-10-24T14:45:38.997 回答
2

这是示例:

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 相同的模板化形式。

于 2016-11-14T18:57:15.500 回答