C ++容器的一般用例

时间:2010-10-24 19:48:36

标签: c++ stl containers

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

  • 位集
  • 双端队列
  • 列表
  • 地图
  • 多重映射
  • 多重集
  • priority_queue
  • 队列
  • 设置
  • 矢量

例如,对于配对搜索,地图通常更好。

2 个答案:

答案 0 :(得分:83)

一张图片胜过千言万语。

container choice flowchart

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

答案 1 :(得分:14)

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

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

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

set - 我已经在multiset部分对其进行了描述。

stack - LIFO - Last In - First Out - 堆叠。基本功能 - push_back,pop_back。无序容器。

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

重要提示:我描述了基本功能,而不是整个功能。有关详细信息,请阅读CPlusPlus.com