详解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)独有的。