C++多重集合類模板
multiset(多重集合)使程序存儲一組數據。與list集合類相似,多重集合的元素既可以作爲存儲的數據又可以作爲數據的關鍵碼,然而,與集合類不同的是多重集合類可以包含重複的數據。
關於set集合類模板的學習————》》C++集合類模板
創建multiset多重集合類模板的方法:
#include<set> //調用set頭文件
...
...
multiset<type>m; //定義一個multiset
//multiset表示聲明一個多重集合類模板,<type>表示集合的類型,m表示集合名。
multiset對象主要成員函數說明:
只是一些常用的,其它還有很多。
函數 | 說明 |
---|---|
begin | 返回指向集合第一個元素的迭代器 |
end | 返回指向集合最後一個元素的迭代器 |
size | 返回集合的大小 |
clear | 刪除集合中所有元素 |
count(x) | 返回集合中值爲x的元素個數 |
find(x) | 返回一個指向x的迭代器,若x不存在,則返回end |
erase(start,end) | 刪除迭代器從start到end範圍內的向量 |
erase(i) | 刪除迭代器第i個元素 |
insert(i,x) | 把值x插入到由迭代器指明的第i個位置 |
insert(i,start,end) | 把迭代器從start到end範圍的元素插入到指明的第i個位置 |
insert(i,n,x) | 把x的n個副本插入到由迭代器指明的第i個位置 |
swap(set) | 交換兩個集合的內容 |
值得注意的是,集合無法通過索引進行賦值和輸入輸出。
迭代器
對multiset集合的各個元素的訪問,通常使用迭代器。
迭代器定義方法:
multiset<int>::iterator it=m.begin();
定義了一個迭代器it指向multiset集合m的開始指針。
multiset集合與迭代器的入門應用
插入操作
multiset<int>m;
m.insert(1);m.insert(3);m.insert(5);
m.insert(7);m.insert(9);m.insert(11);
multiset<int>::iterator it;
for(it=m.begin();it!=m.end();it++)
cout<<*it<<" ";
給大家做一下解釋,
先是定義一個int類型的multiset集合m,重複插入操作6次。
定義一個迭代器it,it=m.begin()初始化指向m的頭指針。
然後通過it++遍歷輸出m的所有元素。
輸出結果爲:1 3 5 7 9 11
需要注意的是,for循環終止條件爲it!=m.end(),當it=m.end()時,it指向的是m的最後元素的下一個空元素,而非最後元素。
刪除操作
承接插入操作繼續運行
m.erase(--it);
for(it=m.begin();it!=m.end();it++)
cout<<*it<<" ";
通過m.erase(- -it); 刪除m最後一個元素,
輸出結果爲:1 3 5 7 9
查找操作
重新回顧一下查找操作find:
find(x) 返回一個指向x的迭代器,若x不存在,則返回end。
承接以上的插入刪除操作:
it=m.find(5);
if(it!=m.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
it=m.find(13);
if(it!=m.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
輸出結果爲:
found
not found
三合一源代碼:
#include<iostream>
#include<set>
using namespace std;
int main(){
multiset<int>m;
m.insert(1);m.insert(3);m.insert(5);
m.insert(7);m.insert(9);m.insert(11);
multiset<int>::iterator it;
for(it=m.begin();it!=m.end();it++)
cout<<*it<<" ";
cout<<endl;
m.erase(--it);
for(it=m.begin();it!=m.end();it++)
cout<<*it<<" ";
cout<<endl;
it=m.find(5);
if(it!=m.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
it=m.find(13);
if(it!=m.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
}
結果圖: