【发布时间】:2014-08-04 10:17:03
【问题描述】:
我将从一个简单的用例示例开始:
-
1234563该人的姓名(例如,
还要考虑,有一个请求打印此数据库,该数据库根据个人 ID(即
std::unordered_map的密钥)按升序排序。天真地,有人会认为使用
std::sort以便根据请求的条件对std::unordered_map进行排序,然后将其打印出来,如下面的示例代码:
std::unordered_map<int, std::string> DB;)。
std::sort(DB.begin(), DB.end());
for(auto p : DB) std::cout << "ID(" << p.first
<< ") - "
<< p.second
<< std::endl;
- 但是,情况并非如此,因为在
std::unordered_map或std::unordered_set范围内使用std::sort会引发编译器错误。
问题:
- 为什么STL的无序容器不能按
std::sort排序? - 是否有一种合法有效的方法来对
std::unordered_map或std::unordered_set进行排序?
【问题讨论】:
-
如果将两个相加没有意义,请不要将事物存储为整数。将两个 SSID 一起添加没有意义,将它们存储为字符串或其他内容。
-
只有在顺序容器上使用类似的变异算法才有意义,
unordered_*不是。 -
1)
sort不知道迭代器来自哪个容器,错误是因为sort需要RandomAccessIterators 而(unordered_)map|set迭代器是BiDirectionalIterators。 2) 这些容器被命名为 unordered_map|set是有原因的。如果您想订购,请使用map|set
标签: sorting c++11 stl unordered-map unordered-set