如果我有以下代码
std::unordered_multimap<std::string, std::vector<double>> myMap;
std::vector<double> v1, v2, v3;
// init v1, v2, v3....
myMap.insert(std::make_pair<std::string, std::vector<double>("vec", v1));
myMap.insert(std::make_pair<std::string, std::vector<double>("vec", v2));
myMap.insert(std::make_pair<std::string, std::vector<double>("vec", v3));
Run Code Online (Sandbox Code Playgroud)
如果我使用迭代器访问值,它们将始终按此顺序: v1, v2, v3
所以基本上如果我插入相同键但不同值的元素,它们是否始终保持插入顺序?
我想这是特定于实现的.unordered_multimap如果实现是桶哈希映射,则具有相同密钥的元素存储在同一个桶中,在这种情况下,它们可以处于相同的插入顺序(这可能是您的情况).
但在unordered_map实施中,例如,使用开放寻址技术,订单可能会改变.我不知道是否有STL实现使用不同的引擎实现,但类的合同没有对相同键的值的顺序做任何假设,所以我不认为你可以采取它理所当然的.
取自这里:
在内部,unordered_map中的元素不会按照其键值或映射值以任何特定顺序排序