C++ multiset容器用法歸納


C++中multiset容器是STL模板<set>庫中一個非常有用的類型,它可以看成一個序列,插入一個數,刪除一個數都能夠在O(logn)的時間內完成,而且他能時刻保證序列中的數是有序的,而且序列中可以存在重復的數(而set容器要求兩兩不同,且不保證有序)

常用成員函數

insert(elem):添加一個elem副本,返回新元素位置,無論插入成功與否。

insert(pos, elem):添加一個elem元素副本,返回新元素位置,pos為收索起點,提升插入速度。

insert(beg,end):將區間[beg,end)所有的元素安插到my_multiset,無返回值。

erase(elem):刪除與elem相等的所有元素,返回被移除的元素個數。

erase(pos):移除迭代器pos所指位置元素,無返回值。

erase(beg,end):移除區間[beg,end)所有元素,無返回值。

clear():移除所有元素,將容器清空。

begin():返回一個隨機存取迭代器,指向第一個元素。

end():返回一個隨機存取迭代器,指向最后一個元素的下一個位置。

rbegin():返回一個逆向迭代器,指向逆向迭代的第一個元素。

rend():返回一個逆向迭代器,指向逆向迭代的最后一個元素的下一個位置。

查找函數

count (elem):返回元素值為elem的個數。

find(elem):返回元素值為elem的第一個元素,如果沒有返回end()。

lower _bound(elem):返回元素值為elem的第一個可插入位置,也就是元素值 >= elem的第一個元素位置。

upper _bound (elem):返回元素值為elem的最后一個可插入位置,也就是元素值 > elem 的第一個元素位置。

equal_range (elem):返回elem可插入的第一個位置和最后一個位置,也就是元素值==elem的區間。

自定義multiset比較器

不只是int類型,multiset還可以存儲其他的類型諸如 string類型,結構體(struct)或類(class)類型。而我們一般在編程當中遇到的問題經常用到自定義的類型,即struct或class。例如下面的例子:

struct student{
  int h,w; }; multiset<student>s;

由於multiset並不知道如何去比較一個自定義的類型。可以定義multiset里面student類型變量之間的小於關系的含義(這里以h為第一關鍵字為例),具體過程如下:

定義一個比較類cmp,cmp內部的operator函數的作用是比較student類型h和w的大小(以h為第一關鍵字,w為第二關鍵字):

struct cmp{
    bool operator()(const student&s1,const student&s2){
        return s1.h<s2.h||s1.h==s2.h&&s1.w<s2.w;
    }
};

 然后將語句"multiset<student>s"改成"multiset<student,cmp>s"這樣以后,就使序列s能夠在插入元素的時候自動去比較已有的元素(重載運算符)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM