1. set、multiset 介绍
- set 不能存相同元素,multiset 能存相同元素。例如存 10 个 1,前者只会存 1 个 1,后者会存 10 个 1,除此以外所有函数功能相同。所以,set 具有去重功能。
- 创建格式:
set<type> mp1 - size:返回实际元素个数
- empty:返回是否为空
- begin、end:可以使用 for 遍历整个 set(红黑树),遍历时按照中序遍历来遍历的。根据红黑树的性质,遍历结果会是一个有序的序列;begin 表示的是第一个元素的迭代器,end 表示的是最后一个元素之后的迭代器,所以遍历范围为 [begin, end);迭代器作为一个抽象化的指针(无法被直接访问的指针,即无法 cout 其地址),无法通过 < 来和 end 迭代器比较,所以必须要使用
it != mp.end() - insert:插入一个元素,O(logN)
- erase:删除一个元素,O(logN)
- find:查找一个元素,返回的是迭代器,如果没找到就返回 set.end(),O(logN)
- count:查询元素出现的次数,因为 set 中的元素唯一,所以只会返回 1(存在)或 0(不存在),一般用来查询元素是否在红黑树中,O(logN)
- lower_bound:大于等于 x 的最小元素,返回的是迭代器
- upper_bound:大于 x 的最小元素,返回的是迭代器
代码演示:
#include<iostream>
#include<set>
using namespace std;
int a[]={10,10,60,20,70,80,30,90,40,100,50};
int main() {
set<int> mp;
for(auto x:a)mp.insert(x);
//for(auto it = mp.begin();it != mp.end();it++)
//cout<<*it<<" ";
for(auto x:mp)cout<<x<<" ";
cout<<endl;
mp.erase(60);
mp.erase();
( x:mp)cout<<x<<;
cout<<endl;
(mp.())cout<<<<;
cout<<<<;
(mp.())cout<<<<;
cout<<<<;
cout<<endl;
x = mp.();
y = mp.();
cout<<*x<<<<*y;
;
}


