c++ - 两个具有相同内容的 unordered_set-s 的迭代顺序是否保证相同
问题描述
如果我有两个unordered_set
具有相同内容的变量(如果已排序),但创建方式不同(例如,第一个变量仅插入了项目,第二个变量以不同的顺序插入、删除了项目等,但两个变量的内容相同),迭代这两个变量会以相同的顺序产生值吗?
PS。这个问题与迭代相同无序集两次的类似问题不同。
解决方案
本标准不作此类保证。排序必然是特定于实现的。
考虑这个例子,看看为什么即使内容相同,排序也可能不同:让我们从两个无序集合开始A
,B
它们已按相同顺序创建和填充值,直到添加一个对象会触发重新散列.
现在考虑将对象添加到B
,然后将其删除,同时不向 中添加任何对象时会发生什么A
。显然,这两个集合是相同的,但是由于B
经过重新散列,这些集合中的对象的顺序会发生变化。
C++11 标准的第 23.2.5.12 节讨论了无序容器的相等性。它指出,找出等式的最坏情况时间复杂度是 O(n^2)。这意味着不能保证相同的顺序,否则我们将能够检查 O(n) 中的相等性。
推荐阅读
- javascript - 如何将 index.html 函数中的更改值传递给角度 4 中的同一项目组件
- c++ - sfml event::close 在窗口启动时调用
- c - VS2017 编译器为除法/余数对发出 2 条除法指令
- excel - 错误的 Excel 文件以保护模式打开,单击启用编辑后更改为正确的文件
- javascript - 如何使用 Protractor 连接到 Oracle 数据库?
- java - 如何使用 servlet 过滤器修改和设置发布请求正文
- php - woocommerce 电子邮件中的换行符
- javascript - jQuery交付倒计时 - 隐藏在周末的特定时间
- azure - 如何在 Azure 中为 Kubernetes 入口控制器创建负载均衡器 (IAAS)
- c# - 将属性列表作为参数传递