0

重複の可能性:
stl の multimap 挿入はどのように順序付けを尊重しますか?

次のようなマルチマップがあります- 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 - アナンド

4

1 に答える 1

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::multimapoperator []

于 2013-01-06T21:57:14.383 に答える