上一篇我們寫到了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的部門就不在此繼續介紹下去了!思想是一樣的!