我在unordered_map中存储了一些中间结果。现在,当尝试输出它时,它显示键按降序排列。有没有办法以其他顺序显示它?怎么样?
答案 0 :(得分:4)
您可以在std::vector
中复制元素,然后使用std::sort
根据您的偏好升序/降序对此向量进行排序,然后输出:
std::unordered_map<int, int> um {{2, 3}, {6, 7}, {0, 5}};
std::vector<std::pair<int, int>> sorted_elements(um.begin(), um.end());
std::sort(sorted_elements.begin(), sorted_elements.end());
至于为什么你不能对无序的STL包装进行排序看看here
答案 1 :(得分:3)
如果您希望按排序顺序保留中间数据,请使用std::map<key,value>
代替std::unordered_map
。默认情况下,它会使用std::less<>
对键进行排序,因此您将按升序获得结果。
std::unordered_map
是哈希表数据结构的实现,因此它将根据使用std::unordered_map
的哈希值在内部排列元素。但是在std::map
的情况下,它通常是红黑二叉树实现。
答案 2 :(得分:0)
你不能。
无序地图只是:无序。
You cannot make any assumptions about iteration order whatsoever
与普通地图相比,这是在无序地图上提高某些操作效率的权衡。如果你想订购,你将不得不牺牲这些增加。