我能否对 vector
进行排序,使其与 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
,我可以用这个吗?
最佳答案
正如评论正确指出的那样,在 unordered_map
上甚至没有远程可移植的匹配排序方式。所以,排序是未指定的。
然而,在未指定的领域,有时出于各种原因,我们可以对我们的实现做的任何事情保持冷静,即使是未指定和不可移植的。那么,有人可以查看您的 map 实现并使用它在 vector 上的确定性吗?
unordered_map
的问题在于它是一个散列。插入其中的每个元素都将被散列,散列(映射到键空间)用作内部数组中的索引。这看起来很有希望,如果不发生碰撞,它也会很有希望。如果发生键冲突,则将元素放入冲突列表中,并且该列表根本不排序。因此,碰撞上的迭代顺序将由插入顺序(反向或直接)决定。因此,如果没有插入顺序的信息,就不可能模仿 unordered_map
的顺序,即使对于特定的实现也是如此。
关于c++ - 我可以对 vector 进行排序以匹配 unordered_map 的排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50455424/