我unordered_map用这段代码插入了元素:
myMap.insert(std::make_pair("A", 10));
myMap.insert(std::make_pair("B", 11));
myMap.insert(std::make_pair("C", 12));
myMap.insert(std::make_pair("D", 13));
Run Code Online (Sandbox Code Playgroud)
但是当我用这个命令来打印键时
for (const auto i : myMap)
{
cout << i.first << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它们与插入它们的顺序不同.
是否可以保留订单?
Pus*_*try 16
不,这是不可能的.
用法std::unordered_map不会对元素顺序提供任何保证.
如果你想保持按地图键排序的元素(如你的例子所示),你应该使用std::map.
如果您需要保留可以使用的有序对列表std::vector<std::pair<std::string,int>>.
不适用于无序关联数据结构。但是,其他数据结构保留顺序,例如 std::map 使数据按其键排序。如果您稍微搜索一下 Stackoverflow,您会发现许多针对具有基于键的快速查找和有序访问的数据结构的解决方案,例如使用 boost::multi_index。
如果只是将值添加到容器中,然后按照插入的顺序将它们取出,那么您可以使用对队列建模的东西,例如std::dequeue. 只是push_back添加一个新值,并pop_front删除最旧的值。如果不需要从容器中删除值,那么只需使用std::vector.
| 归档时间: |
|
| 查看次数: |
7249 次 |
| 最近记录: |