unordered_map元素显示

时间:2013-02-21 13:14:53

标签: c++ unordered-map

 #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]。只有当我从零开始输入键值时才会发生这种情况,请帮助

2 个答案:

答案 0 :(得分:2)

你错过了unordered_map的观点。它不会像map那样对元素进行排序,也不会将元素按照它们放入的顺序排列,它不能保证元素在底层结构中的顺序或者在使用迭代器时,将返回元素的顺序。

以上允许C ++实现使用更有效的底层结构(哈希表)。

答案 1 :(得分:2)

您目前正在滥用unordered_map。此容器通告它不会以任何特定顺序保留其元素,因此结果不应该是意外的。

您应该使用(有序)std::map代替:

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