C++ 不';t std::无序映射是否保留插入顺序?

C++ 不';t std::无序映射是否保留插入顺序?,c++,unordered-map,C++,Unordered Map,我对无序映射的理解是,它存储每个键的单位值,而不进行排序。但是否预期插入顺序不会保留 编译和运行时: std::unordered_map<std::string,int> temp; temp["Start"] = 0; temp["Read"] = 0; for ( auto iter : temp ) { std::cout << iter.first.c_str(); } 对于Android的GCC 4.9,它输出: Read Start 这是一个b

我对无序映射的理解是,它存储每个键的单位值,而不进行排序。但是否预期插入顺序不会保留

编译和运行时:

std::unordered_map<std::string,int> temp;
temp["Start"] = 0;
temp["Read"] = 0;
for ( auto iter : temp )
{
    std::cout << iter.first.c_str();
} 
对于Android的GCC 4.9,它输出:

Read
Start

这是一个bug,还是预期的?

这是预期的。在本标准中,对于
std::unordered_map

中元素的顺序,没有任何保证:

在内部,无序_映射中的元素不会按照其键或映射值的任何特定顺序进行排序,而是根据其散列值组织到存储桶中,以允许直接通过其键值快速访问单个元素(平均时间复杂度恒定)


“无序”的哪一部分不清楚?散列法……。@CoryKramer:我希望“无序”不会改变顺序。但是我错了……你可能会混淆“排序”和“排序”。如果你需要维护顺序,考虑使用<代码> STD::矢量< /代码>,>代码> STD::列表,<代码> STD::队列或<代码> STD::DeQue/COD>。
Read
Start