我可以对向量进行排序以匹配unordered_map的排序吗?

Can I sort a vector to match the sorting of an unordered_map?

本文关键字:排序 unordered map 向量 我可以      更新时间:2023-10-16

我可以对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上的排序。因此,未指定排序。

但是,在未指定的领域,有时出于各种原因,我们可以对我们的实现所做的任何事情保持冷静,即使未指定且不可移植。那么,有人可以查看您的映射实现并在向量上使用它的确定性吗?

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