c++ - 为什么有人会使用 set 而不是 unordered_set?

标签 c++ algorithm data-structures c++11

C++0x 正在引入 unordered_set,它可以在 boost 和许多其他地方使用。我的理解是 unordered_set 是具有 O(1) 查找复杂度的哈希表。另一方面,set 只不过是一棵具有 log(n) 查找复杂度的树。 为什么会有人使用 set 而不是 unordered_set?即是否需要 set 了?

最佳答案

无序集必须通过以下几种方式为其 O(1) 平均访问时间付费:

  • setunordered_set 使用 更少的内存存储相同数量的元素。
  • 对于少量元素,在 set 中查找可能比 unordered_set 中的查找更快 .
  • 尽管 unordered_set平均情况 中许多操作更快,对于 set,它们通常保证具有更好的最坏情况复杂性 (例如 insert )。
  • 那个 set如果您想按顺序访问它们,对元素进行排序很有用。
  • 您可以按字典顺序比较不同的set< , <= , >>= . unordered_set不需要 s 来支持这些操作。

关于c++ - 为什么有人会使用 set 而不是 unordered_set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1349734/

相关文章:

java - 返回字符串所有大小的排列

比较字符串并将其插入到链接列表

c++ - "const std::stop_token&"或者只是 "std::stop_token"作为线程函数的参数?

c++ - 创建发布版本时,我收到以下警告(与 2008 设置相比)

c++ - Qt 5.0 与 MingW?

c# - 如何停止传送门 A 和 B 之间的无限旅行?

c++ - 如何在 C++ 中使用 Bluez5 DBUS API 来配对和连接新设备?

java - 匹配 String1 中 String2 字符的出现和模式

google-app-engine - 删除祖先后,子数据存储对象会怎样?

algorithm - 将 1 添加到数字链表