我该如何向multimap中插入元素?

17

我想在C++中设置一个multimap,如下所示:

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

但是我怎么往里面插入数据呢?我尝试了下面的代码,但它无法编译:

mmList.insert(pair<string, string>, vector<double>("a", "b", test));
3个回答

20
你可以使用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));

7

自从 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::pairpiecewise_construct 构造函数,该构造函数专门针对您的用例进行了引入:
mmList.emplace(std::piecewise_construct,
    std::forward_as_tuple("a", "b"),
    std::forward_as_tuple(test));

这段代码虽然不再短小,但它有一个好处:不会调用任何不必要的构造函数。对象直接从给定参数中在std::multimap中创建。

在Ideone上查看代码


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)。pair必须与multimap具有相同的模板形式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接