首页 > 解决方案 > 我可以对向量进行排序以匹配 unordered_map 的排序吗?

问题描述

我可以对 a 进行排序以vector使其匹配 a 的排序unordered_map吗?我想遍历unordered_map并且如果我只能遍历每个容器一次以找到它们的交集,而不是必须搜索每个键。

例如,给定一个unordered_map包含:

1、2、3、4、5、6、7、8、9

按以下顺序散列:

1、3、4、2、5、7、8、6、9

我想要一个vector

1、2、3、4

我可以以某种方式提取用于排序的unordered_map排序,vector因此它将排序为:

1、3、4、2

有没有办法做到这一点?我注意到unordered_map确实提供了它hash_function,我可以使用它吗?

标签: c++sortingvectorhashunordered-map

解决方案


正如评论正确指出的那样,甚至没有远程可移植的匹配排序方式unordered_map。所以,排序是未指定的。

然而,在未指定的领域,有时出于各种原因,我们可以对我们的实现所做的任何事情感到很酷,即使未指定且不可移植。那么,有人可以查看您的地图实现并使用它在矢量上的确定性吗?

问题unordered_map在于它是一个哈希。插入其中的每个元素都将被散列,散列(映射到键空间)用作内部数组中的索引。这看起来很有希望,如果不发生碰撞,这将是有希望的。如果发生键冲突,则将元素放入冲突列表中,并且该列表根本不排序。因此,冲突的迭代顺序将由插入的顺序(反向或直接)确定。因此,如果没有插入顺序的信息,就不可能模仿 的顺序unordered_map,即使对于特定的实现也是如此。


推荐阅读