-4
 #include "stdafx.h"
 #include <unordered_map>
 #include <iostream> 
 using namespace std;

 typedef tr1::unordered_map<int, int>MyMap ;

 int _tmain(int argc, _TCHAR* argv[])
 {
    MyMap PolicyMap;
    PolicyMap.insert(Myap::value_type(0, 10));
    PolicyMap.insert(Myap::value_type(1, 20));
    PolicyMap.insert(Myap::value_type(2, 30));

    for (Myap::const_iterator i = PolicyMap.begin(); i != PolicyMap.end() ; i++)
    {
      cout << " [" << i->first << ", " << i->second << "]" << endl;
    } 
return 0;

}

上記のコードの出力が[0、10]、[2、30]、[1、20]である理由。[2、30]、[1、20]、[0、10]である必要があります。ゼロからキー値を入力し始めた場合にのみ発生します。助けてください

4

2 に答える 2

2

の要点を見逃していますunordered_map。のように要素をソートmapしたり、要素を配置したのと同じ順序のままにしたりしません。要素が基礎となる構造でどの順序になるか、または要素がどの順序になるかについて保証しません。イテレータを使用するときに返されます。

上記により、C++ 実装でより効率的な基礎となる構造 (ハッシュ テーブル) を使用できるようになります。

于 2013-02-21T13:22:44.633 に答える
2

あなたは現在 を悪用していunordered_mapます。このコンテナは、要素を特定の順序で保持しないことをアドバタイズするため、予期しない結果になることはありません。

std::map代わりに(ordered) を使用する必要があります。

#include <map>
#include <functional>  // needed for std::greater<>

// The third template argument defines the sort direction for the map
// std::greater results in the map being ordered descending (and always by key)
typedef std::map<int, int, std::greater<int> > MyMap;
于 2013-02-21T13:23:43.260 に答える