std ::奇怪的顺序与俄罗斯文本的地图

时间:2017-05-23 09:34:10

标签: c++11 stl stdmap

像这样的简易地图

std::map<std::string, std::vector<int>> container = {
    {"первый",{1}},
    {"второй",{2}},
    {"третий",{3}},
    {"четвертый",{ 4 }}
};

for (auto it = container.begin(); it != container.end(); ++it)
{
    auto tt = it;
    // do smth
}

但是为了第二个元素({"второй",{2}},)先行

enter image description here

并且这取决于文本 - 例如,如果第二个元素将使用英文文本“second”({"second",{2}},) - 顺序将是正常的,这将是顺序的第二个元素。

谁可以解释发生了什么,或者这只是VS 2017版本15.3中的错误?

2 个答案:

答案 0 :(得分:0)

我的错误是我忘记了std :: map是一个已排序的容器,我的情况下的关键是“первый”和“второй” - 所以俄语字母“второй”是第一个。

工作代码如下:

std::unordered_map<std::string, std::vector<int>> container = {
    {"первый",{1}},
    {"второй",{2}},
    {"третий",{3}},
    {"четвертый",{ 4 }}
};

但请记住,unordered_map没有保证订单!

答案 1 :(得分:0)

在这种情况下,更好的设计将是

std::map<std::vector<int>,std::string> container = {
{{1},"первый"},
{{2},"второй"},
{{3},"третий"},
{{4},"четвертый"}
};
  • 所以std :: map将按数字键自动排序