日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

set与map容器

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 set与map容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先來看看set集合容器:

?

set集合容器實現了紅黑樹的平衡二叉樹數據結構,在插入元素時它會自動調整二叉樹的排列,把該元素放到適當的位置,并且保證左右子樹平衡。平衡二叉檢索樹采用中序遍歷算法。

?

對于set,vector,map等等,它們的前向迭代器定義是這樣的(以set為例):

?

set<int>::iterator it;

for(it=s.begin();it!=s.end();it++){}

?

那么反向迭代器呢?

?

set<int>::reverse_iterator rit;

for(rit=s.rbegin();rit!=s.rend();rit++){}

?

常用方法:insert(),erase(),find(),clear()

find()方法是查找元素方法,如果找到就返回該元素迭代器的位置,否則就返回最后一個元素后面的一個位置。

?

這樣來使用:

it=s.find(5);

if(it!=s.end()) {}

else??????????? {}

?

?

關于比較函數:

?

如果元素不是結構體,而是基本數據類型,那么就自己定義一個比較函數:

struct cmp {bool operator()(const int &a,const int &b){return a>b;} };int main() {set<int,cmp> s;for(int i=1;i<10;i++)s.insert(i);set<int,cmp>::iterator it;for(it=s.begin();it!=s.end();it++)cout<<*it<<" ";return 0; }


如果元素是結構體,那么比較函數直接可以寫在結構體里面。

struct Student {string name;double score;bool operator < (const Student &a) const{return a.score<score;} };set<Student> s;


對于set容器來說,它不能有關鍵字相同的元素同時存在,如果要保留相同的元素,就用multiset多重集合容器。

其基本操作跟set集合容器差不多一樣。定義方法是:multiset<string> ms;

?


map映照容器:

?

map映照容器的元素數據是由一個鍵值和一個映照數據組成的,鍵值與映照數據之間具有一一對應關系。map也是用紅黑樹實現

的。同set一樣,map不允許插入元素鍵值相同,而multimap多重應照集合可以允許鍵值重復。

?

使用方法:

int main() {map<string,double> m;m["Jack"]=98.0;map<string,double>::iterator it;for(it=m.begin();it!=m.end();it++)cout<<(*it).first<<" "<<(*it).second<<endl;return 0; }


主要方法有:insert(),clear(),erase(),find()等等,基本跟set一樣。對于multimap使用方法跟map差不多一樣。

?

std::pair主要的作用是將兩個數據組合成一個數據,兩個數據可以是同一類型或者不同類型。

例如 std::pair<int,float> 或者 std::pair<double,double>等。pair實質上是一個結構體,其主要的兩個成員變量是first和second,這兩個變量可以直接使用。初始化一個pair可以使用構造函數,也可以使用std::make_pair函數。

make_pair函數的定義如下:

template pair make_pair(T1 a, T2 b) { return pair(a, b); }


所以m.insert(pair<string,double>("Luce",88.5));

與?m.insert(make_pair("Luce",88.5)); 是同樣的效果。

?

示例:

int main() {typedef pair<string,double> lesson;typedef multimap<string,lesson> stu;stu a;a.insert(make_pair("Jack",lesson("math",90.5)));a.insert(make_pair("Jack",lesson("history",85.5)));a.insert(make_pair("Luce",lesson("math",99.0)));map<string,lesson>::iterator it;for(it=a.begin();it!=a.end();it++)cout<<(*it).first<<" "<<(*it).second.first<<" "<<(*it).second.second<<endl;return 0; }


?

總結

以上是生活随笔為你收集整理的set与map容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。