首页 > 解决方案 > std::unordered_map 未按预期运行

问题描述

std::unordered_map<std::string,std::string> mymap;
mymap.insert(std::make_pair("ELEMENTTYPE", "NEWINTERFACE"));
mymap.insert(std::make_pair("STYLEFILE", "Style_Light.txt"));
mymap.insert(std::make_pair("ELEMENTNAME", "IN1"));
mymap.insert(std::make_pair("POSITIONX", "0"));
mymap.insert(std::make_pair("POSITIONY", "0"));
mymap.insert(std::make_pair("SIZEX", "50"));
mymap.insert(std::make_pair("SIZEY", "50"));

我希望地图按该顺序包含这些元素,但相反,它是:

-尺寸

-元素类型

-样式文件

-尺寸

-位置X

-位置

我很困扰; 为什么要std::unordered_map订购我的元素?

标签: c++dictionarystdunordered

解决方案


术语 unordered instd::unordered_map表示顺序未指定。您不能依赖unordered_*容器的顺序。所有关联容器(将值映射到键的容器)都会弄乱元素的顺序,因为这种顺序允许它们在按键搜索时获得更好的性能,这通常是使用映射的目标。

如果您想自己控制订单,可以使用std::vector<std::pair<std::string, std::string>>. 您将有一组对,按照您想要的方式排序,但是您放弃了find关联容器提供的快速实现。


推荐阅读