详解C++ STL multiset 容器
详解C++ STL multiset 容器
本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧。
multiset容器的概念和性质
\(set\)在英文中的意义是:集合。而\(multi-\)前缀则表示:多重的。所以\(multiset\)容器就叫做:有序多重集合。
\(multiset\)的很多性质和使用方式和\(set\)容器差不了多少。而\(multiset\)容器在概念上与\(set\)容器不同的地方就是:\(set\)的元素互不相同,而\(multiset\)的元素可以允许相同。
所以,关于一些\(multiset\)容器和\(set\)容器的相同点,本篇博客就不加以赘述了。需要学习的小伙伴推荐进入本蒟蒻的这篇博客:
与set容器不太一样的地方:
s.erase(k);
\(erase(k)\)函数在\(set\)容器中表示删除集合中元素\(k\)。但在\(multiset\)容器中表示删除所有等于\(k\)的元素。
时间复杂度变成了\(O(tot+logn)\),其中\(tot\)表示要删除的元素的个数。
那么,会存在一种情况,我只想删除这些元素中的一个元素,怎么办呢?
可以妙用一下:
if((it=s.find(a))!=s.end())
s.erase(it);
\(if\)中的条件语句表示定义了一个指向一个\(a\)元素迭代器,如果这个迭代器不等于\(s.end()\),就说明这个元素的确存在,就可以直接删除这个迭代器指向的元素了。
s.count(k);
\(count(k)\)函数返回集合中元素\(k\)的个数。\(set\)容器中并不存在这种操作。这是\(multiset\)独有的。