C++容器的一般用例

Elp*_*rto 26 c++ containers stl

C++标准库容器的一般用例是什么?

  • 位集合
  • 双端队列
  • 名单
  • 地图
  • 多重映射
  • 多集
  • priority_queue
  • 队列
  • 向量

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

Tom*_*icz 83

一张图片胜过千言万语.

容器选择流程图

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

  • 您是否有更新版本以反映新的C++ 11容器? (2认同)

Kir*_*rov 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以获取更多信息.

  • 我不知道2010年的情况如何,但是现在我看到人们建议使用[cppreference.com](http://en.cppreference.com/w/)而不是cplusplus.com,因为感觉_cppreference_质量更好._cppreference_的等效链接是:[容器库](http://en.cppreference.com/w/cpp/container)顺便说一下,我可以保证这个帖子中没有人使用STL; 他们正在使用标准库,它恰好适用于STL.请参阅http://stackoverflow.com/questions/5205491/whats-this-stl-vs-c-standard-library-fight-all-about/5205571#5205571 (2认同)