天天看點

C++STL之multiset多重集合容器

上一篇我們寫到了set,但是set集合是不允許出現帶有重複的鍵值的,那麼這篇就說說如果存在鍵值重複的節點怎麼處理

multiset與set一樣,唯一不同的地方就是multiset允許重複的鍵值插入 ,但是set不允許,就這個差别!

multiset也需要聲明頭檔案,#include<set>,由于它包含了重複的鍵值元素,是以,在進行插入,删除,查找元素的會和set有一些不同的地方。

#include<iostream>
#include<string>
#include<set>
using namespace std;

int main()
{
	multiset<string> ms;
	
	ms.insert("abc");
	ms.insert("123");
	ms.insert("xyz");
	ms.insert("456");
	ms.insert("xxx");
	
	multiset<string>::iterator it;
	for(it = ms.begin(); it != ms.end(); it ++)
		cout<<*it<<endl;
	
	return 0; 
}
           

*multiset元素的删除

采用erase()方法可以删除multiset對象中的某個疊代器位置上的元素,或某段疊代器區間中的元素,鍵值等于某個值的所有重複元素并采用clear()方法清空元素。

#include<iostream>
#include<string>
#include<set>
using namespace std;

int main()
{
	multiset<string> ms;
	
	ms.insert("abc");
	ms.insert("123");
	ms.insert("xyz");
	ms.insert("456");
	ms.insert("xxx");
	
	multiset<string>::iterator it;
	for(it = ms.begin(); it != ms.end(); it ++)
		cout<<*it<<endl;
		
	//删除值為123的所有重複元素,傳回删除元素總數1
	int n = ms.erase("123");
	cout<<"Total deleted:"<<n<<endl;
	
	//輸出删除後的剩餘元素
	cout<<"all elements after deleted:"<<endl;
	for(it = ms.begin(); it != ms.end(); it ++)
		cout<<*it<<endl;
	
	return 0; 
}
           

*查找元素

使用find()方法查找元素,如果找到,則傳回該元素的疊代器位置(如果該元素存在重複,則傳回第一進制素重複元素的疊代器位置,)如果沒有找到,就傳回end()疊代器位置

#include<iostream>
#include<string>
#include<set>
using namespace std;

int main()
{
	multiset<string> ms;
	
	ms.insert("abc");
	ms.insert("123");
	ms.insert("xyz");
	ms.insert("456");
	ms.insert("xxx");
	
	multiset<string>::iterator it;
	it = ms.find("123");
	if(it != ms.end())
		cout<<*it<<endl;
	else
		cout<<"Not find it!"<<endl;
	
	it = ms.find("nbu");
	if(it != ms.end())
		cout<<*it<<endl;
	else
		cout<<"Not find it!"<<endl;
		
	return 0; 
}
           

其他相同與set的部門就不在此繼續介紹下去了!思想是一樣的!

繼續閱讀