multiset用法詳解

multiset和set都是屬於c++中的集合容器

multiset與set的區別:multiset支持重複,而set會去重
set相關知識可參考set集合詳解

頭文件

#include< set >

聲明和初始化

聲明一個multiset,按升序排列,默認升序排列
 multiset<int>set1;
 等價於:
 或 multiset<int,less<int>>set1;

聲明一個multiset,按降序排列
multiset<int, greater<int>>set1;

常用函數

函數 用法 作用
insert() set1.insert(n) 向集合插入元素n,n可以爲重複值
erase() set1.erase(10) 在set1中刪除元素等於10的所有副本
empty() set1.empty() 返回值bool類型,若set1爲空,則返回true
swap() set1.swap(set2) 將set1和set2交換
size() set1.size() 返回值爲int類型,set1當前存放的元素的個數
find() set1.find(n) 返回iterator,指向第一個找到數值n的位置,若找不到則返回的iterator等於set1.end()
resize() set1.resize(10) 重置set1的大小爲10
lower_bound() set1.lower_bound(n) 返回set1中第一個找到數值n的位置的iterator,如果找不到則返回end()
upper_bount() set1.upper_bound(n) 返回set1中最後一個找到數值n的位置的後一個位置的iterator,如果找不到則返回end()
count() set1.count(n) 確定set1中數值n出現的次數

迭代器

set的迭代器通常實現爲set元素的指針。

//開始指針(正向)
set1.begin()

//結束指針(正向),指向set1最後一個元素的後一位
set1.end()

//開始指針(逆向)
set1.rbegin()

//結束指針(逆向),指向set1最後一個元素的後一位
set1.rend()

//常量開始指針(正向),不能通過該指針來修改所指內容
set1.cbegin()

//常量結束指針(正向),不能通過該指針來修改所指內容,指向set1最後一個元素的後一位
set1.cend()

輸出

//迭代器,順序訪問
	for (multiset<int>::iterator p = nums.begin(); p != nums.end(); p++)
		cout << *p << " ";
		
//迭代器,逆序訪問
	for (set<int>::reverse_iterator p = nums.rbegin(); p != nums.rend(); p++)
		cout << *p << " ";

代碼演示:

#include<iostream>
#include<set>
using namespace std;
int main(){
	
	//聲明默認集合,默認升序
	 multiset< int > set1;
	 for(int i=10;i>=0;i--){
	 	set1.insert(i);
	 }
	 set1.insert(1);//測試是否去重 
	 set1.insert(2);
	 
	 //順序輸出
	 cout<<"順序遍歷集合set1:"; 
	 for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){
	 	cout<<*it<<" ";
	 }
	 
	 //逆序輸出 
	 cout<<endl<<"逆序遍歷集合set1:";
	 for(multiset<int>::reverse_iterator it = set1.rbegin();it!= set1.rend();it++){
	 	cout<<*it<<" ";
	 }
	 //測試元素獲取集合大小 
	 cout<<endl<<"set1集合大小爲:"<<set1.size(); 
	 
	 
	 //測試集合是否非空 
	 multiset< int,less<int> > set2;
	 cout<<endl<<"set1是否爲空"<<set1.empty();
	 cout<<endl<<"set2是否爲空"<<set2.empty()<<endl;
	 
	 //刪除元素
	 set1.erase(1); 
	 cout<<"刪除元素1後,set1集合元素::"; 
	 for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){
	 	cout<<*it<<" ";
	 }
	 
	 //查找元素8
	  cout<<endl<<"找到set1集合元素8並輸出:";
	  multiset<int>::iterator it=set1.find(8);
	  cout<<*it;
	  
	 //交換集合元素
	 set2.insert(0);
	 set2.insert(0);
	 set1.swap(set2);
	 cout<<endl<<"交換後set1元素爲:" ;
	 for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){
	 	cout<<*it<<" ";
	 }
	 cout<<endl<<"交換後set2元素爲:" ;
	 for(multiset<int>::iterator it = set2.begin();it!=set2.end();it++){
	 	cout<<*it<<" ";
	 }
	 
	 //清空集合
	 set1.clear();
	 cout<<endl<<"集合set1是否非空:"<<set1.empty()<<endl; 
	 
	 //聲明集合按降序排列
	  multiset< int ,greater<int> > set3;
	  set3.insert(11);
	  set3.insert(13);
	  set3.insert(14);
	  cout<<"輸出降序集合set3:";
	  for(multiset<int> :: iterator it=set3.begin();it!=set3.end();it++){
	  	cout<<*it<<" ";
	  } 
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章