C++ STL set集合容器

汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/


#include<set>

实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节
点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。


set <int> p; //集合容器,没有重复元素

multiset <int> p; //集合容器,有重复元素

p.insert(K); //将K加入集合p中
p.size(); //返回元素个数
p.empty(); //判断是否为空
p.clear(); //清除所有元素
p.erase(K); //将集合中元素K删去
p.count(K); //返回某个值元素的个数(只对multiset有效,set的count()值只有0和1)

set<int>::iterator it; //定义迭代器
set<int>::reverse_iterator it; //定义反向迭代器
it=p.begin(); //指向头
it=p.end(); //指向末尾,末尾不包含元素
it=rbegin() //返回指向集合中最后一个元素的反向迭代器
it=rend() //返回指向集合中第一个元素的反向迭代器
it=p.find(K); //返回一个指向被查找到元素的迭代器,如果没有找到返回p.end();

正向遍历

for (set<int>::iterator it=p.begin();it!=p.end();it++)

{

  cout<<*it<<endl;

}//输出元素,默认按照升序排序

/*注意迭代器指针不能进行四则运算,只能自增自减*/
/*set的插入,查找,删除操作复杂度均为o(log(N))*/


其他不常用的函数:

equal_range()    返回集合中与给定值相等的上下限的两个迭代器
get_allocator()    返回集合的分配器
lower_bound()    返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()    返回一个用于元素间值比较的函数
max_size()    返回集合能容纳的元素的最大限值
swap()    交换两个集合变量
upper_bound()    返回大于某个值元素的迭代器
value_comp()     返回一个用于比较元素间的值的函数


自定义比较函数

(1)元素不是结构体:

//自定义比较函数myComp,重载“()”操作符

struct myComp

{

    bool operator()(const your_type &a,const your_type &b)

    {

        return a.data-b.data>0;

    }

}

set<int,myComp>s;

......

set<int,myComp>::iterator it;

(2)如果元素是结构体,可以直接将比较函数写在结构体内。

struct Info

{

    string name;

    float score;

    //重载“<”操作符,自定义排序规则

    bool operator < (const Info &a) const

    {

        //按score从大到小排列

        return a.score<score;

    }

}

set<Info> s;

......

set<Info>::iterator it;

 

你可能感兴趣的:(C++)