2013-01-06 36 views
0
为了

可能重复:
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 - 阿南德

+0

^h你试过了吗? – WeaselFox

回答

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; 
} 

PS:请注意,这std::multimap不具有operator []