STL set 使用方法小结

 

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而 set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可 完成,不涉及到内存移动和拷贝,所以效率比较高。

set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列。如果需要集合中的元素允许重复那么可以使用multiset

插入和删除要比向量(vector)快,但插入比容器内元素都大的新元素或查找元素时会有些慢。

使用时要加头文件

#include<set>

struct compare
{
    bool operator()(const int &a,const int &b)const
    {
        return a<b;  //定义比较关系<
        }
    };  //运算符重载,重载<

//定义了<之后,==和>以及>=,<=就都确定了,STL的比较关系都是用<来确定的,所以必须通 过定义< “严格小于”来确定比较关系

 

定义: set<int>st; //集合容器

set<int,compare> st3;//自定义内部比较函数为conpare(只定义"<",其他的均由)

set<T> st2(st) //创建一个与st相同的容器

vecter<int>vec;

st(vec.begin(),vec.end());//用vector初始化set

set<int>:iterator p; 定义set迭代器

set<int>:: reverse_iterator p3; 定义反向集合定位器(MS没什么用)

int x;

成员函数:

 

begin //返回集合首元素位置迭代器

 

end //返回集合尾元素位置迭代器

 

insert(x) //将元素x加入集合

 

find(x) // 返回x所在位置的迭代器,找不到返回st.end()

 

clear() //清空集合

 

empty() //判断集合是否为空

 

erase(x) //删除x这个元素

 

erase(p) //删除p位置的元素

 

count(x) //判断是否存在元素x 存在返回1 , 否则返回0

 

lower_bound(x) //返回第一个大于等于x的迭代器,找不到返回st.end();

 

upper_bound(x) //返回第一个大于x的迭代器,找不到返回st.end();

 

s.equal_range(x) //返回lower_bound(x)upper_bound(x)(感觉用来查找比find靠谱)

 

size() //返回容器中元素个数

 

st.swap(st2) //交换st与st2的元素 (也可以写成st2.swap(st))

 

集合的判等 ==

两个集合相等,当且仅当他们的元素个数相等,且同一个位置上的值相等.

集合比较大小

两个集合比较是基于第一个不同的元素的大小比较

 

练手例题:HNOI2004 宠物收养所

http://www.cnblogs.com/evan-oi/archive/2012/03/24/2415297.html

 

如果说这俩玩意有什么用呢,还真没什么用...赛场上没时间写平衡树就用它骗骗分吧。

 

转载于:https://www.cnblogs.com/evan-oi/archive/2012/03/22/2412401.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值