C ++中列表和多重集之间的区别

Difference between a list and multiset in C++

在 C++ 中:

那么两者具体有什么区别呢?为什么我要用 on 而不是另一个?

我尝试在网上查找此信息,但大多数参考资料(例如 cplusplus.com)以不同的方式谈论这两个容器,因此差异并不明显。

来自multiset

std::multiset is an associative container that contains a sorted set of objects

Search, insertion, and removal operations have logarithmic complexity.

来自list

std::list is a container that supports constant time insertion and removal of elements from anywhere in the container

Fast random access is not supported

因此,如果您想要更快的搜索,请使用multiset

为了更快的插入和移除:使用list

不是那么简单,但简而言之:
如果需要多次查询按值搜索,选择std::multiset.
否则std::list

最大的区别是std::list是一个链表,而std::multiset是一个树结构(典型的是RB树)。这意味着 std::list 中的元素访问具有 O(N) 访问,而 std::multiset 中的元素访问具有 O(logN).

这也意味着从 begin()end() 迭代 std::multiset 将为您提供排序的数据,而迭代 std::list 将为您提供数据插入的顺序。

standard library中有很多容器,它们具有不同的属性和对访问、插入和删除元素的时间的影响。您应该从整个组中选择最适用于特定情况的一个。您对 std::multisetstd::list 的定义是人为的,没有任何意义。如果椅子和马都有腿,并不代表它们是相似的。