set 用法

++ Set常用用法

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

常用操作:
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator。
    例:
    set<int> s;
    ......
    set<int>::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
            set<int> s;
            s.erase(2);        //删除键值为2的元素
            s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
            set<int> s;
            set<int>::iterator it;
            it=s.find(5);    //查找键值为5的元素
            if(it!=s.end())    //找到
                cout<<*it<<endl;
            else            //未找到
                cout<<"未找到";
6.自定义比较函数
    (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++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原...

 

c++ stl集合set介绍

   c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。

1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素

2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数

3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

set模板原型://Key为元素(键值)类型

template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >

从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。


set的各成员函数列表如下:

c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器

c++ stl容器set成员函数:clear()--清除所有元素

c++ stl容器set成员函数:count()--返回某个值元素的个数

c++ stl容器set成员函数:empty()--如果集合为空,返回true

c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器

c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器

c++ stl容器set成员函数:erase()--删除集合中的元素

c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器

c++ stl容器set成员函数:get_allocator()--返回集合的分配器

c++ stl容器set成员函数:insert()--在集合中插入元素

c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数

c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值

c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器

c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器

c++ stl容器set成员函数:size()--集合中元素的数目

c++ stl容器set成员函数:swap()--交换两个集合变量

c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器

c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数


c++ stl集合set插入,遍历用法举例

#include<iostream> 
#include<set> 
using namespace std; 
//set插入元素操作  
int main() 
{ //定义一个int型集合对象s,当前没有任何元素.由www.169it.com搜集整理set<int> s; s.insert(8);  //第一次插入8,可以插入  s.insert(1); s.insert(12); s.insert(6); s.insert(8);   //第二次插入8,重复元素,不会插入  set<int>::iterator it; //定义前向迭代器 //中序遍历集合中的所有元素  for(it=s.begin();it!=s.end();it++) cout<<*it<<endl;    system("pause"); return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去掉标点符号

//去掉标点符号、空格title title.replaceAll("[\\pP\\p{Punct}| ]", "");

C语言向文件写入内容并读取显示

将学生信息&#xff08;姓名、年龄、学号和平均分&#xff09;写入文件&#xff0c;然后读取显示出来。要求&#xff1a;从控制台输入学生信息&#xff1b;可以输入任意数目的学生信息&#xff1b;文件每行存储一条学生信息&#xff0c;姓名、年龄、学号、平均分以tab(\t)为分隔…

C语言main()主函数执行完毕后是否会再执行一段代码

C语言main()主函数执行完毕后是否会再执行一段代码 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网main() 主函数执行完毕后&#xff0c;是否可能会再执行一段代码&#xff1f;给出说明。main主函数是所有程序必须具备的函数&#xff0c;是C/C人员一接触代码就知道的函数…

java 操作redis

//连接redis &#xff0c;redis的默认端口是6379Jedis jedis new Jedis ("localhost",6379); //验证密码&#xff0c;如果没有设置密码这段代码省略jedis.auth("password"); jedis.connect();//连接jedis.disconnect();//断开连接Set<String> keys…

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

C语言用递归求斐波那契数&#xff0c;让你发现递归的缺陷和效率瓶颈 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网递归是一种强有力的技巧&#xff0c;但和其他技巧一样&#xff0c;它也可能被误用。一般需要递归解决的问题有两个特点&#xff1a;存在限制条件&#xf…

【转载保存】java四种线程池的使用

https://blog.csdn.net/qq_31441667/article/details/78830395

size_t strtok

C语言字符串长度统计函数strlen()的实现原理 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网C标准库中有一个字符串长度统计函数strlen()&#xff0c;用来统计字符串的长度&#xff0c;它的实现与下面类似。 复制纯文本复制 #include <stdlib.h>size_t strlen( cha…

【保存】maven的pom.xml标签的xsi:schemaLocation处报错

maven装X的原因是 maven对下载不下来的jar文件会生成一个 *.lastUpdated 文件 &#xff0c;不将*.lastUpdated文件干掉&#xff0c;它是不会给你重新下载jar, so 将 *.lastUpdated 这个家伙干掉&#xff0c;再update一下就OK了 原文&#xff1a;https://blog.csdn.net/…

strlen() Bug

C语言strlen()以NUL作为字符串结束标记&#xff0c;自定义一个字符串长度统计函数消除这个Bug 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网我们知道&#xff0c;字符串长度统计函数 strlen() 以NUL作为字符串结束标记&#xff0c;但是很不幸的是&#xff0c;有时候字符…

C语言中文件的读取和写入

C语言中文件的读取和写入 注意&#xff1a; 1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2、电脑处理文本型和二进制型的不同 &#xff08;因为电脑只认识二进制格式&#xff09; 在C语言中写文件 //获取文件指针 FILE *pFile fopen("1.txt", //打开文件…

基于ansj_seg和nlp-lang的简单nlp工具类

1、首先在pom中引入ansj_seg和nlp-lang的依赖包&#xff0c; ansj_seg包的作用&#xff1a; 这是一个基于n-GramCRFHMM的中文分词的java实现&#xff1b; 分词速度达到每秒钟大约200万字左右&#xff08;mac air下测试&#xff09;&#xff0c;准确率能达到96%以上; 目前实现了…

ArrayList的四种初始化方法

转载&#xff1a;https://beginnersbook.com/2013/12/how-to-initialize-an-arraylist/ Method 1: Initialization using Arrays.asList Syntax: ArrayList<Type> obj new ArrayList<Type>(Arrays.asList(Object o1, Object o2, Object o3, ....so on)); Exam…

C++ Deque(双向队列

C Deque(双向队列)C Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问&#xff0c;但它不像vector 把所有的对象保存在一块连续的内存块&#xff0c;而是采用多个连续的存储块&#xff0c;并且在一个映射结构中保存…

java.lang.IllegalArgumentException: URLDecoder异常解决

异常&#xff1a; Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u9" at java.net.URLDecoder.decode(URLDecoder.java:194) at com.hbzx.co…

STL迭代器

STL迭代器及总结解释迭代器是一种对象&#xff0c;它能够用来遍历STL容器中的部分或全部元素&#xff0c;每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口&#xff0c;所谓迭代器是一种概念上的抽象&#xff1a;那些行为上象迭代器的东西都可以叫做迭代器。…

C++ Sets MultiSets

C Sets & MultiSetsSTL Set介绍 集合(Set)是一种包含已排序对象的关联容器。多元集合(MultiSets)和集合(Sets)相像&#xff0c;只不过支持重复对象,其用法与set基本相同。Set 又称集合&#xff0c;实际上就是一组元素的集合&#xff0c;但其中所包含的元素的值是唯一的&am…

SSDB 配置文件详解

SSDB 的配置非常简单, 附带的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 还是需要修改一些配置的. 下面做介绍. SSDB 的配置文件是一种层级 key-value 的静态配置文件, 通过一个 TAB 缩进来表示层级关系. 以 # 号开始的行是注释. 标准的配置文件如下: # ssdb-serve…

C++ Maps MultiMaps

C Maps & MultiMapsC Maps & MultiMaps C Maps是一种关联式容器&#xff0c;包含“关键字/值”对。C Multimaps和maps很相似&#xff0c;但是MultiMaps允许重复的元素。1.begin() 返回指向map头部的迭代器2.clear() 删除所有元素3.count() 返回指定元素出现的次数语法…

英语单词词干化表

博客&#xff1a;https://blog.csdn.net/potato012345/article/details/78091939 下载地址&#xff1a;https://github.com/Zhangtd/MorTransformation