map 以及set C++實現
阿新 • • 發佈:2018-12-13
C++的STL容器大致分為兩種,一種是序列式容器,是有順序的集合,另一種是經過排序的容器,稱為關聯式的容器,set和map是使用的最多的關聯式容器,在想起中插入資料的時候會自動地進行排序,而且搜尋的效率很高。
#include<iostream> #include<set> using namespace std; void Print(set<int> s){ cout<<"set 元素 :"; for(set<int>::iterator it=s.begin(); it!=s.end(); it++){ //遍歷集合的方法 cout<<*it<<" "; } cout<<endl; } int main(){ set<int> s; //建立集合 int temp; int n; cin>>n; while(n--){ cin>>temp; s.insert(temp); //向集合中插入元素 } cout<<s.size()<<endl; //集合的大小 Print(s); cin>>temp; s.erase(temp); //從集合中刪除某個元素 Print(s); cin>>temp; if(s.find(temp) == s.end()) //find() 查詢方法, begin()返回指向set開頭的迭代器。end()返回指向結尾的迭代器 cout<<"Not find..."<<endl; else cout<<"Exist..."<<endl; s.clear(); //清空集合 cout<<s.size()<<endl; }
map是以鍵值對的形式進行管理的容器,map中的元素鍵值唯一,不會重複,
#include<iostream> #include<map> using namespace std; void Print(map<string, int> m){ map<string, int>::iterator it; //注意遍歷的方式 使用一個pair來接受返回的迭代器 for(it = m.begin(); it!=m.end(); it++){ pair<string, int> p = *it; cout<<"<"<<p.first<<","<<p.second<<">"<<endl; } } int main(){ map<string, int> m; m["red"] = 1; m["yellow"] = 2; m["blue"] = 3; m.insert(make_pair("black", 4)); //兩種插入元素的方式 插入時候如果鍵值一樣,那麼後面的元素會覆蓋掉原來的元素 cout<<m.size()<<endl; //map的大小 Print(m); m.erase("black"); Print(m); pair<string, int> temp = *m.find("yellow"); //find() 查詢某個元素 cout<<temp.first<<" --> "<<temp.second<<endl; if(m.find("green") == m.end()) cout<<"Not find..."<<endl; m.clear(); }