zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    POJ
    POJ
    操作系统
    POJ
    POJ
    codeforces Educational Round 89
    codeforces Round 647(div. 2)
    codeforces Educational Round 88
    后缀自动机简单总结
    dsu on tree 简单总结
  • 原文地址:https://www.cnblogs.com/zhyfzy/p/4116231.html
Copyright © 2011-2022 走看看