我已经声明了一些键和值的const映射。地图上的键被无序声明。
#include<iostream>
#include<map>
int main(){
const std::map<std::string, int> ROMES = {
{ "I", 1 },
{ "V", 5 },
{ "X", 10 },
{ "L" , 50},
{ "C", 100 },
{ "D", 500 },
{ "M", 1000 }
};
for( auto const& [key, val] : ROMES ){
std::cout << key
<< ':'
<< std::to_string(val)
<< std::endl ;
}
return 0;
}
地图的内容已打印在控制台上。我对地图元素按字母顺序排序感到惊讶。
C:100
D:500
I:1
L:50
M:1000
V:5
X:10
为什么会这样?什么时候?
答案 0 :(得分:8)
答案 1 :(得分:0)
std::map
通过比较元素的键对元素进行排序。默认情况下,它使用std::less
进行比较,并使用std::string
implements operator<
按字典顺序比较字符串。这就是为什么您看到元素按字母顺序排序的原因。
对于您想要的东西,您可以给std::map
一个自定义比较器,以根据键代表的数字值比较键,而不用逐字比较它们。
否则,请改用std::unordered_map
,甚至可以像评论中建议的@Yksisarvinen那样使用std::vector<std::pair<std::string, int>>
。