std :: unordered_multimap中元素的顺序

djW*_*ann 3 c++ stl multimap

如果我有以下代码

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

所以基本上如果我插入相同键但不同值的元素,它们是否始终保持插入顺序?

Jac*_*ack 6

我想这是特定于实现的.unordered_multimap如果实现是桶哈希映射,则具有相同密钥的元素存储在同一个桶中,在这种情况下,它们可以处于相同的插入顺序(这可能是您的情况).

但在unordered_map实施中,例如,使用开放寻址技术,订单可能会改变.我不知道是否有STL实现使用不同的引擎实现,但类的合同没有对相同键的值的顺序做任何假设,所以我不认为你可以采取它理所当然的.

取自这里:

在内部,unordered_map中的元素不会按照其键值或映射值以任何特定顺序排序

  • 必须订购具有相同密钥的元素的顺序.这是为了实现[equal_range](http://en.cppreference.com/w/cpp/container/unordered_map/equal_range).[MSDN](http://msdn.microsoft.com/en-us/library/bb982522.aspx)也说:"但是,总是可以放心,具有等效排序的元素的任何子集在受控制中是相邻的sequence.`. (2认同)
  • @djWann:我应该澄清一下,这不是一个全序,只是具有相同值的元素是相邻的。 (2认同)