c++11 - 基于STL算法排序 STL unordered_map和unordered_set的排序?

  显示原文与译文双语对照的内容
122 4

我将从演示一个简单的用例示例开始:

  • 在这个问题中,social C++ 代码是一个人的社会保险 ID,它的值是一个人的social,它的值是那个人的全名( 比如 。 std::unordered_map<int, std::string> DB; ) 。

  • 还要考虑一下,根据of的人 of,有一个请求打印这里数据库的请求。

  • 一般情况下,人们会想使用 std::sort 按照请求的标准排序 std::unordered_map,然后打印,如下面的示例代码:


 std::sort(DB.begin(), DB.end());


 for(auto p : DB) std::cout <<"ID(" <<p.first


 <<") -" 


 <<p.second 


 <<std::endl;



  • 尽管如此,因为使用了 std::sort 或者的范围将引发编译器错误。

问题:

  • 为什么 std::sort 容器不能按排序?
  • std::unordered_map 或者 std::unordered_set 进行排序有合法和有效的方法?
时间: 原作者:

74 2

在生成哈希数据之后, unordered 容器内部存储了的哈希数据,因此无法对它们排序。

为了对数据进行排序,可以使用另外一个非哈希容器( 比如 。 映射或者设置) 和使用无序版本( 所以你可以使用普通的数据对数据进行排序,无序的对每个条目进行快速访问),或者你可以使用它们


std::map<int, int> ordered(unordered.begin(), unordered.end());


for(auto it = ordered.begin(); it!= ordered.end(); ++it)


 std::cout <<it->second;



我建议不要经常执行上述操作( 无序容器具有缓慢的顺序访问)

https://stackoverflow.com/a/6212709/1938163

原作者:
...