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::multiset
和 std::list
的定义是人为的,没有任何意义。如果椅子和马都有腿,并不代表它们是相似的。
在 C++ 中:
列表是可以按顺序包含非唯一值的集合
多重集是一个集合,可以包含序列中的非唯一元素
那么两者具体有什么区别呢?为什么我要用 on 而不是另一个?
我尝试在网上查找此信息,但大多数参考资料(例如 cplusplus.com)以不同的方式谈论这两个容器,因此差异并不明显。
来自multiset:
std::multiset
is an associative container that contains a sorted set of objectsSearch, 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 containerFast 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::multiset
和 std::list
的定义是人为的,没有任何意义。如果椅子和马都有腿,并不代表它们是相似的。