关闭

c++ STL set 使用

132人阅读 评论(0) 收藏 举报
分类:

  set 集合容器

    实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。

   平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。

   构造set集合主要目的是为了快速检索,不可直接去修改键值


#include<iostream>
#include<set>
using namespace std;
//自定义比较函数
struct cmp
{
    bool operator()(const int &a,const int &b)const{
        return a>b;
    }
};
struct node
{
    int num;
    //如果是结构体,可自行给定比较函数
    bool operator<(const node &other)const{
        return num<other.num;
    }
    node(int _num):num(_num){}
};
typedef set<node>::iterator It1;//迭代器类型
typedef set<int,cmp>::reverse_iterator It2;//反向迭代器类型
int main()
{
    set<node>st1;
    set<int,cmp>st2;

    //插入
    for(int i=0;i<5;i++){
        st1.insert(node(i));
        st2.insert(i);
    }

    //遍历,已排序
    for(It1 it=st1.begin();it!=st1.end();it++)
        cout<<it->num<<endl;

    //反向遍历,已排序
    for(It2 it=st2.rbegin();it!=st2.rend();it++)
        cout<<*it<<endl;

    node x=node(1);
    //元素删除
    st1.erase(x);

    //元素查找
    It1 it=st1.find(x);
    if(it!=st1.end())
        cout<<"Yes"<<endl;
    else cout<<"No"<<endl;

    cout<<"size="<<st1.size()<<endl;//大小
    cout<<"empty="<<st1.empty()<<endl;//为空

    st1.clear();
    st2.clear();//清除所有元素
}


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99028次
    • 积分:2778
    • 等级:
    • 排名:第12855名
    • 原创:192篇
    • 转载:18篇
    • 译文:0篇
    • 评论:14条
    最新评论