【C++】set容器使用
阿新 • • 發佈:2018-11-03
1.定義
set容器可以根據元素的值自動進行排序,不允許元素重複
2.基本操作
操作 | 函式 |
---|---|
宣告 | set<型別> s |
返回指向第一個元素的迭代器 | s.begin() |
返回指向最後一個元素的迭代器 | s.end() |
返回某個值元素的個數 | s.count() |
集合中元素的數目 | s.size() |
返回集合能容納的元素的最大限值 | s.max_size() |
返回指向集合中最後一個元素的反向迭代器 | s.rbegin() |
返回指向集合中第一個元素的反向迭代器 | s.rend() |
清除所有元素 | s.clear() |
刪除集合中的元素 | s.erase() |
如果集合為空,返回true | s.empty() |
返回一個指向被查詢到元素的迭代器 | s.find() |
在集合中插入元素 | s.insert() |
交換兩個集合變數 | s.swap() |
迭代器 | set<型別>::iterator it |
返回第一個key>=keyelem元素的迭代器 | s.lower_bound(keyelem) |
返回第一個key>keyelem元素的迭代器 | s.upper_bound(keyelem) |
返回容器中key與keyelem相等的上下限的倆個迭代器 | s.equal_range(keyelem) |
3.例子
int main(){
set<int> s;
s.insert(1);
s.insert(5);
s.insert(8);
s.insert(2);
s.insert(101);
s.insert(1);
s.insert(4);//[1,2,4,5,8,101]
cout<<s.max_size()<<endl;//234565^
cout<<s.size()<<endl;//6
cout<<s.count(1)<<endl;//1
cout<<*s.upper_bound(5)<<endl;//8
set<int>::iterator t;
for(t=s.begin();t!=s.end();t++)
cout<<*t<<endl;
return 0;
}
4.例題
set容器需要排序存放,因此在自定義型別的時候,要確定比較規則
#include<set>
using namespace std;
class Person{//定義Person類,存放人的年齡和id
public:
Person(int age, int id): id(id), age(age){}
public:
int id;
int age;
};
class mycompare2{//定義比較類,比較人的年齡大小
public: bool operator()(Person p1, Person p2){
return p1.age > p2.age;//從大到小
}
};
int main(){
set<Person, mycompare2> sp; //set需要排序
Person p1(10,60), p2(30, 40), p3(50, 20);
sp.insert(p1); sp.insert(p2); sp.insert(p3);
for(set<Person, mycompare2>:: iterator it = sp.begin(); it != sp.end(); it++){
cout << it->age << " " << it->id << endl;
}
cout << "--------" << endl;
}