c++ - 我可以对 vector 进行排序以匹配 unordered_map 的排序吗?

标签 c++ sorting vector hash unordered-map

我能否对 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/

相关文章:

c++ - QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?

c++ - 如何在用户定义的函数中实现短路评估?

c++ - 如何在 C++ 中存储从 Vector 中弹出的项目

c++ - 求模拟粒子轨迹的3D点和 vector 几何C++库

c++ - vector C++ 中的并行搜索

c++ - 可能是 gtest 错误 - ASSERT_EQ 和 ASSERT_TRUE 编译失败

C++ 类构造函数

c++ - 在其他函数中对结构 vector 和 vector 部分进行排序?

java - 如何替换java中字符串列表中整数的第一个实例?

javascript - 按日期对 Trello 卡片数组进行排序