STL set 詳細用法
阿新 • • 發佈:2019-08-09
一個集合(set)是一個容器,它其中所包含的元素的值是唯一的。
用到的庫
#include <set>
定義
最簡單:
set<int> a;
set和其他的stl一樣,都支援自定義。
因為set會自動將元素從小到大排序,所以我們可以設定它的比較函式,這裡與優先佇列十分相似。
法1 利用自定義比較函式:
#include<stdio.h> #include<set> #include<string> using namespace std; struct People { string name; int age; }; struct cmp { bool operator ()(People a, People b) { if(a.name==b.name)return false; return a.age<b.age; //按照年齡由小到大進行排序 } }; set<People,cmp>s;
法2 運算子過載
#include<stdio.h> #include<set> #include<string> using namespace std; struct People { string name; int age; bool operator <(const People p) const //運算子過載 { if(name==p.name)return false;//按名字去重 return age<p.age; //按照年齡由小到大進行排序 } }; set<People>s;
法3 友元函式
#include<bits/stdc++.h> using namespace std; struct People { string name; int age; friend bool operator <(const People & a,const People & b) { if(a.name==b.name)return false;//按名字去重 return a.age<b.age; //按照年齡由小到大進行排序 } }; set<People>s;
遍歷
也是需要一個迭代器進行訪問:
set<People>::iterator it; for(it=s.begin();it!=s.end();it++) { printf("姓名:%s 年齡:%d\n",(*it).name.c_str(),(*it).age); }
訪問set的值需要採用*t的方式。
其他用法:
begin(); 第一個元素地址
clear(); 清楚set容器
count(x); x元素的個數
empty(); 是否為空
end(); 最後一個元素後面一個的地址
erase(x); 刪除元素x
find(x); 查詢元素x,返回地址,若沒有則返回end
insert(x); 增加元素x
size(); 元素個數