C++11 带俄语文本的std::map中的奇怪顺序
像这样简单的地图C++11 带俄语文本的std::map中的奇怪顺序,c++11,stl,stdmap,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;
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
}
std::映射容器={
{"первый",{1}},
{"второй",{2}},
{"третий",{3}},
{"четвертый",{ 4 }}
};
for(auto-it=container.begin();it!=container.end();+it)
{
自动tt=it;
//做smth
}
但按顺序第二个元素({2},
)先开始
这是文本相关的-例如,如果第二个元素将与英语文本“second”({second',{2}}),顺序将是正常的,这将是顺序中的第二个元素
谁能解释发生了什么,或者这只是VS 2017版本15.3中的错误?我的错误是我忘记了std::map是一个分类容器,我的例子中的键是“Пццц”和“цццццццццццц”-俄语
工作代码如下所示:
std::unordered_map<std::string, std::vector<int>> container = {
{"первый",{1}},
{"второй",{2}},
{"третий",{3}},
{"четвертый",{ 4 }}
};
std::无序映射容器={
{"первый",{1}},
{"второй",{2}},
{"третий",{3}},
{"четвертый",{ 4 }}
};
但请记住,无序的_地图没有秩序保证 在这种情况下,更好的设计是
std::map<std::vector<int>,std::string> container = {
{{1},"первый"},
{{2},"второй"},
{{3},"третий"},
{{4},"четвертый"}
};
std::映射容器={
{{1},"первый"},
{{2},"второй"},
{{3},"третий"},
{{4},"четвертый"}
};
- 所以std::map将按数字键自动排序
请记住,这是一个已排序的容器,它按键排序。然后在……之前出现。是的,没错!谢谢大家!@当然,有些编程人员认为,所讨论的字母表的顺序和相应的Unicode代码(无论何种)的顺序可能有相似之处,也可能没有相似之处。工作正常吗?在什么意义上?std::unordered_map是无序的,也就是说,没有任何秩序是可以保证的。一般来说,问题是为什么会产生如此奇怪的秩序-在这个变体中,正如预期的那样工作,但当然“没有任何秩序是可以保证的”-您完全正确。。。