std :: map键值对不按顺序迭代

时间:2016-06-14 17:27:00

标签: c++ iteration stdmap

我在std::map中插入键值对作为

key = //something;
value = //something;
demoMap[key] = value;

在此处打印键和值可以得到正确的结果。但是,当我将此地图迭代为:

for( std::map<std::string, std::string>::iterator it = demoMap.begin();
     it != demoMap.end(); it++ ) {
    std::cout << it->first + "," << it->second;
}

使用上面的迭代,我得到在第一个之前打印的第二个键值对。为什么会这样?应首先打印第一个键值对,因为地图的迭代器设置为地图的begin()

1 个答案:

答案 0 :(得分:4)

std::map不是按插入顺序排序的,而是通过按键排序来排序,默认情况下,这些按键是通过键上的operator<获得的。

对于std::string,默认operator<使用词典排序,因此密钥将仅按此顺序迭代。