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

关于c++ - 我可以对 vector 进行排序以匹配unordered_map的排序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50455424/

10-17 02:14