multimap query - 我们存储具有多个值的键的顺序

时间:2013-01-06 14:44:46

标签: c++ stl multimap

  

可能重复:
  how does the stl’s multimap insert respect orderings?

我有一个多图,如下 - multimap<string,string> myMultiMap;

myMultiMap[sKey] = s1;
myMultiMap[sKey] = s2;
myMultiMap[sKey] = s3;

我按顺序添加s1,s2,s3。稍后,我可以通过值1,2,3并在此基础上得到它的值。

例如,如果我传递'1',我应该回到s1。

如果我这样做 - iterator = myMultiMap.equal_range(sKey); 获取迭代器列表中第一个元素的值。

这项工作?迭代器是否按照插入顺序存储键的值(如果是多个值)?

请告知。

thx - Anand

1 个答案:

答案 0 :(得分:0)

在C ++ 11中,似乎检索顺序与插入顺序相同(参见此处:http://en.cppreference.com/w/cpp/container/multimap

我在GCC 4.7.1上尝试了以下简短程序,它满足了这个期望:

#include <iostream>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    multimap<string, string> m;
    m.insert({"a", "x"});
    m.insert({"a", "y"});
    m.insert({"a", "z"});

    auto r = m.equal_range("a");
    for_each(r.first, r.second, [] (decltype(*(r.first))& p) { cout << p.second << endl; });

    return 0;
}

P.S。:请注意,std::multimap没有operator []