介绍:

set是根据元素的值进行排序的集合,所插入的元素在集合中唯一。通过迭代器访问容器中元素。

复杂度:

set是c++标准库提供的一种关联式容器,set的内部由二叉搜索树实现,并且对树进行了平衡处理,使得元素在树中分布较为均匀。因此set的搜索、插入、删除复杂度都是 O(logn)

 

set的成员函数

函数名 功能 复杂度
size( ) 返回set中的元素个数 O(1)
clear( ) 清空set O(n)
begin( ) 返回指向set开头的迭代器 O(1)
end( ) 返回指向set末尾的迭代器 O(1)
insert( ) 向set中插入元素key O(logn)
erase( ) 删除含有key的元素 O(logn)
find( )

搜索与key一致的元素,并且返回指向该元素的迭代器

没有与key一致的元素,则返回末尾end()

O(logn)
count() 返回某个值元素的个数  
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器  
upper_bound() 返回大于某个值元素的迭代器  
     

set默认是less算子(从小到大排序  输出的时候也是从小到大)

对less算子,调用x<y,对greater算子,调用x>y

set<int,greater<int> > c;//从大到小 注意 尖括号要隔开
for(set<int>::iterator it=b.begin();it!=b.end();it++){//从大到小输出
    cout<<" "<<(*it);
}

 

用法:

使用set 要加#include<set>头文件

#include<iostream>
#include<set>
using namespace std;
void Print(set<int> s){
    cout<<s.size()<<":";
    for(set<int>::iterator it=s.begin();it!=s.end();it++){
        cout<<" "<<(*it);
    }
    cout<<endl;
}
int main(){
    set<int> s;
    s.insert(8);
    s.insert(1);
    s.insert(7);
    s.insert(4);
    s.insert(8);
    s.insert(4);
    Print(s);// 4:1 4 7 8
    s.erase(7);
    Print(s);// 3:1 4 8
    s.insert(2);
    Print(s);// 4:1 2 4 8
    if(s.find(10)==s.end()){
        cout<<"not find."<<endl;
    }
    return 0;
}