是否可以迭代按值排序的地图?

时间:2015-12-01 18:55:47

标签: c++ dictionary

我已经读过,创建一个地图的顺序是不可能的,但是我想知道是否可以按顺序迭代该值。

例如:

如果我有map<int, string> m我有值

m[1] = "Matt"
m[2] = "Car"
m[3] = "Arnold"
m[4] = "Bat"

而不是更改实际集合中的顺序是否可以简单地按字母顺序迭代和打印元素,以便输出Arnold, Bat, Car, Matt

2 个答案:

答案 0 :(得分:3)

std::map根据键的元素operator <或自定义比较器对其元素进行排序。但是,它不能根据值进行排序。

您可能会对std::set<std::string>感兴趣,其中值<(但您丢失了“直接”索引),或者您可以使用简单的std::vector<std::string> std::sort {{1}} 1}}。

答案 1 :(得分:1)

您必须将map中的值复制到另一个结构中(例如vector)并在那里对它们进行排序。

map根据键按顺序存储值,无法根据值顺序查找。

如果需要,您可以创建一个跟踪订单顺序的类。