在C ++中:
列表是一个可以按顺序包含非唯一值的集合
multiset是一个可以按顺序包含非唯一元素的集合
两者之间的具体区别是什么?我为什么要使用另一个呢?
我尝试在线查找此信息,但大多数参考文献(例如cplusplus.com)以不同的方式讨论这两个容器,因此差异不明显。
答案 0 :(得分:4)
来自multiset:
std::multiset
是一个包含已排序的关联容器 一组对象搜索,插入和删除操作具有对数复杂性。
来自list:
std::list
是一个容器,支持常量时间从容器中的任何位置插入和删除元素快速随机访问不支持
因此,如果您想要更快的搜索,请使用multiset
。
更快插入和删除:使用list
。
答案 1 :(得分:4)
最大的区别是std::list
是链表,而std::multiset
是树结构(通常是RB树)。这意味着std::list
访问O(N)
std::multiset
O(logN)
std::multiset
{/}}} {/}}
这也意味着从begin()
到end()
迭代std::list
将为您提供排序数据,而迭代app.UseWebApi(httpConfiguration)
将为您提供数据插入的顺序。
答案 2 :(得分:0)
不是那么简单,而是简短:
如果您需要多次查询按值搜索,请选择std::multiset.
否则std::list
。
答案 3 :(得分:0)
standard library中有不少容器,它们具有不同的属性,对访问,插入和删除元素的时机有影响。您应该从整个组中选择最适用于特定情况的一个。您对std::multiset
和std::list
的定义是人为的,没有任何意义。如果椅子和马都有腿,这并不意味着它们是相似的。