关闭

c++ STL set 使用

194人阅读 评论(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
查看评论

C++ STL Set使用

最简单的用法 #include #include #include using namespace std; int main(){ setstrset; set::iterator it; strset.insert("cantaloupes"); s...
  • Sup_Heaven
  • Sup_Heaven
  • 2012-10-02 20:10
  • 4553

stl中hash_set的使用

在hash_set中,元素不会被排序 下面这个例子中,hash_set的EqualKey必须有特别的设计,不能沿用equal_to,因为此例中的元素是c风格字串,而c风格字串必须使用strcmp来进行比较 下面是具体源码: #include #include #include using...
  • u011619422
  • u011619422
  • 2015-05-20 09:24
  • 992

c++ STL 算法set_union和sort

灵活使用STL中的相关算法,对C++开发是必备的,这里记录下最近用到的两个STL算法。 1.set_union 合并集合S1US2,得到并集,这里有个前提是S1和S2是set集合的迭代器,这就意味着这些集合是排过序的 ,可以有重复值,这就可以接受set\multiset作为参数; tem...
  • a2796749
  • a2796749
  • 2016-09-06 00:29
  • 658

C++ 标准模板库STL set 使用方法与应用介绍(一)

这次先看例子程序: #include #include #include #include using namespace std; int main() { /* type of the collection: * - no duplicates *...
  • shihui512
  • shihui512
  • 2013-05-14 08:41
  • 7816

c++ STL中的set容器

c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原...   c++ stl集合set介绍...
  • huangfei711
  • huangfei711
  • 2015-08-07 10:59
  • 2703

STL 标准模板库之<set>详解

浏览本文之前,事先告知,本文由两个部分,如果你只是忘记了的某些常用的用法,那只要看前半部分《STL_快速养成》,如果你是初次接触set并且想要做一番深究的话,可以把整篇都看完,相信大家或多或少都会有所收获 一。《STL_快速养成》    1.的特性 ...
  • wr132
  • wr132
  • 2015-01-27 15:36
  • 829

C++ STL中set底层实现方式

Q:STL中set底层实现方式? 为什么不用hash? A: 第一个问题:set底层实现方式为RB树(即红黑树)。     第二个问题:     首先set,不像map那样是key-value对,它的key与value是相同的。关于...
  • xiamentingtao
  • xiamentingtao
  • 2017-02-17 16:53
  • 1719

C++的STL中集合(set)的使用说明

文章转载自:http://www.cnblogs.com/yaoyueduzhen/p/4536929.htmlset,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。头文件:#include常用操作:begin()    返回set容器的第一个元...
  • u011499425
  • u011499425
  • 2016-09-18 17:34
  • 6977

C++ STL set::find的用法

上次面阿里巴巴。面试官问了我这样一个问题,“C++ STL中的set是如何实现的”。当时只答了二叉树,回来查下书,原来一般是红黑树,后悔没好好记住啊。。。 接着,面试官又考了我一道这样的编程题:定义一个Student结构体,包括name和age等数据,要求编程实习在set中查找一个name == ...
  • lishenglong666
  • lishenglong666
  • 2015-03-11 09:33
  • 934

C++ STL入门教程(6)——set(集合)的使用(附完整程序代码)

一、简介 集合(Set)是一种包含已排序对象的关联容器。 begin() 返回指向第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数 empty() 如果集合为空,返回true end() 返回...
  • synapse7
  • synapse7
  • 2013-08-20 10:29
  • 2194
    个人资料
    • 访问:148139次
    • 积分:3188
    • 等级:
    • 排名:第12748名
    • 原创:192篇
    • 转载:18篇
    • 译文:0篇
    • 评论:15条
    最新评论