【问题标题】:General use cases for C++ containersC++ 容器的一般用例
【发布时间】:2011-04-29 22:25:03
【问题描述】:

C++ standard library containers 的一般用例是什么?

  • 位集
  • 双端队列
  • 列表
  • 地图
  • 多地图
  • 多组
  • priority_queue
  • 队列
  • 设置
  • 堆栈
  • 矢量

例如,地图通常更适合配对搜索。

【问题讨论】:

标签: c++ stl containers


【解决方案1】:

一张图片胜过一千个字。

它可以从 nolyc 获得,它是 Freenode 上 ##C++ 的信息机器人,使用命令“容器选择”或“容器选择”。您在回复中收到的这张图片的链接位于 adrinael.net,这表明我们应该感谢 Freenode 的##C++ 社区成员 Adrinael

【讨论】:

  • 非常有用的图片,几乎正是我要找的东西
  • 你有更新版本来反映新的 C++11 容器吗?
  • @Arbalest This other question,其中当前的应该被标记为重复,在this answer
  • ...还有an accepted answer 也发布了与这张完全相同的图片,尽管声称它的来源不同。我不认为为机器人托管图像是作者身份的有用指示。所以,我要冒个险,说真正要感谢的来源/人更有可能是大卫·J·摩尔,在这里:homepages.e3.net.nz/~djm/cppcontainers.html
  • 嗯,这张图并不能真正回答所有情况。像第一个问题“顺序重要”吗?是的,但我还需要按键查找元素。我该去哪里?
【解决方案2】:

bitset - 用于存储位。通用 - 存储一些标志的值。你不需要更多的 1 位。

deque - 双端队列 - push_back、push_front、pop_back 和 pop_front - 基本类的方法。 “未排序”(无序)容器。

list - 链表。此容器不是内存连续的。添加和删​​除元素的时间是 O(1),但查找特定元素的时间是 O(n)。无序容器。

map - 容器,存储对(std::pair)。第一个是键 - 地图中的每个元素都必须具有唯一键。地图表示为树,因此在地图中搜索元素是 n*log(n)。这个容器总是排序的,这就是为什么添加和删除元素会导致更多时间 - 树(数据结构)是二元和平衡的。

multimap - 几乎与 std::map 相同,但允许具有相同键的对。例如,多图可以包含元素:(666, "alabala"), (666, "asdfg"),而标准的 std::map 不能。此容器也已排序。

multiset - 再次 - 与 set 相同,但具有可重复的元素。 set - 好吧,这也总是排序的 STL 容器。例如,一个集合是 { 1, 2, 3 },当您尝试将“1”添加到该集合中时,它不会被添加,因为已经存在这样的元素。 (它类似于数学的集合)。因此,多重集允许多个元素具有相同的值,例如 { 1, 1, 1, 2, 3, 4, 4, 4, 4 } 是正确的多重集,但它不是一个集。在 std::set 中添加和删除元素仍然是对数时间,因为它表示为二叉、排序和平衡树。

priority_queue - 根据一些严格的弱排序条件,它的第一个元素总是它包含的元素中最大的。基本功能 - push_back 和 pop_back。

queue - FIFO 结构 - 先进先出。 (或与 LILO 相同 - 后进 - 后出)。这类似于标准队列 - 当您去商店并开始排队等候时,第一个将是第一个去的。你可以只是 push_back 和 pop_front。无序容器。

set - 我已经在多集部分描述了它。

stack - LIFO - 后进先出 - 堆栈。基本功能 - push_back、pop_back。无序容器。

vector - 类似于标准 c++ 数组。它被视为常规数组,它是内存连续的,可以传递给 C 程序(传递第一个元素的地址)。无序容器。

重要提示:我描述的是基本功能,而不是全部功能。阅读CPlusPlus.com 了解更多信息。

【讨论】:

  • 我不知道 2010 年的情况如何,但现在我看到有人建议使用 cppreference.com 而不是 cplusplus.com,因为感觉 cppreference 有更好的质量。 cppreference 的等效链接是:Containers library Btw,我可以保证这个线程中没有人使用 STL;他们正在使用标准库,它恰好从 STL 改编了很多。见stackoverflow.com/questions/5205491/…
  • @underscore_d - 是的,cppreference.com 绝对是更好的来源。我不再使用 cplusplus.com,它是.. 让我们这样说 - 我不会推荐它。我也同意 STL 和标准库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多