set\multiset容器

  • 概念
  • 构造和赋值
  • 大小和交换
  • 插入和删除
  • 查找和统计
  • 排序
  • pair队组

概念

  • 集合,插入数据的同时自动排好顺序,也叫关联容器。底层结构是二叉树实现。
  • set和multiset区别:
    set不允许容器中有重复的元素。set插入数据的同时会返回插入结果ret=s.insert(10);,ret是一个pair队组,第一个值表示插入的迭代器,第二个值是bool类型表示插入是否成功ret.second
    multisetmultiset不会检测数据,只返回迭代器不判断,因此允许容器中有重复的元素。

构造和赋值

  • 构造:
    set<T> st; //默认构造函数:set<int>s3;
    set(const set &st); //拷贝构造函数set<int>s2(s1);
  • 赋值:
    set& operator=(const set &st); //重载等号操作符s3 = s2;
  • 插入数据:
    s1.insert(10);
  • 遍历:
    使用迭代器

    for (set<int>::iterator it = s.begin(); it != s.end(); it++){cout << *it << " ";
    }
    

大小和交换

无法重新指定大小
size(); //返回容器中元素的数目
empty(); //判断容器是否为空
swap(st); //交换两个集合容器

插入和删除

insert(elem); //在容器中插入元素。
clear(); //清除所有元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem); //删除容器中值为elem的元素。

查找和统计

find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key); //统计key的元素个数,set不允许重复,结果只能为0或1

排序

set容器在插入时默认排序规则为从小到大,利用仿函数可改变排序规则。插入时就改变。

  1. set容器存放的是自定义的数据类型

    class MyCompare {public:bool operator()(int v1, int v2) {return v1 > v2;}
    };
    //定义时,第二个参数类型为仿函数类型。
    set<int,MyCompare> s2;
    s2.insert(10);
    //在迭代的时候类型也需要变为
    for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) {}
    
  2. set存放自定义数据类型
    class comparePerson{public:bool operator()(const Person& p1, const Person &p2){//按照年龄进行排序  降序return p1.m_Age > p2.m_Age;}
    };
    //其他一样 Person是自定义的类型
    set<Person, comparePerson> s;
    for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++){}
    

pair队组

  • pair队组可以用来描述成对出现的数据,利用对组可以返回两个数据
  • 创建
    pair<type, type> p ( value1, value2 ); //默认构造 value1 value2赋初值
    pair<type, type> p = make_pair( value1, value2 );
  • 访问p.firstp.second

C++中set容器的基本使用----在B站听黑马程序员c++课程的记录相关推荐

  1. 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中

    目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...

  2. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  3. 黑马程序员中的简单网页制作

    前言 黑马程序员中的简单网页制作 代码如下(示例): <!DOCTYPE html> <html lang="en"><head><met ...

  4. 黑马程序员,黑马论坛 ------JAVA中的反射机制

    文章来源:黑马程序员,黑马论坛 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法 ...

  5. 黑马程序员---Java 容器集合

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 集合: 1.map 映射表的基本思想是它维护的是键-值(对)关联,因此程序员可以 ...

  6. 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  7. 黑马程序员-java-高新技术中《九》

                       --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- 一:注解 1.注解(Annotation) 注解相当一个类或接口,每一个注解 ...

  8. linux中波浪号代表什么_Linux有什么吸引力,在程序员中如此受欢迎?

    在过去的几十年里,操作系统已经取得了很大的前进.曾经由微软Windows或苹果macOS主导的操作系统,现在已不再是常态. 千禧年之后,随着人们对核算环境的探索,各种操作系统开端发挥作用.Linux是 ...

  9. 面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试

    在如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?这篇博文后,提到了不少引导的说辞和技巧,如果能把面试官的提问引导到事先准备好的亮点上,一方面确实可以更有效地耗费面试时间,另一方面也 ...

最新文章

  1. C++核心编程(一)
  2. 虚拟机网络连接方式linuxcentos
  3. 国家发改委就数据基础制度征求意见 鼓励互联网企业开放公共属性数据
  4. flannel源码分析--WatchLeases
  5. 浅谈promise用es5实现
  6. JQuery中一些常用函数的运用
  7. 安卓文件共享服务器,安卓文件共享云服务器
  8. 实体以及实体型和实体集
  9. 手机调试python的软件_Appium+Python(ios真机移动端App H5混合自动化实战测试)
  10. 什么从什么写短句_新年新气象跨年了,准备好发什么说说了吗
  11. 如何快速成为C++工程师?
  12. mysql C where语句_MYSQL WHERE语句优化
  13. 阿里P7跳槽后曝光薪资截图:新公司月入税后五万多,很满足!
  14. 并不对劲的AC自动机
  15. C# 线程调用主线程中的控件
  16. ERP库存管理 华夏
  17. 秋招之8.31农行研发中心笔试
  18. 高音符號的由來是怎樣的
  19. 机器学习在饿了么竞价广告中的实践
  20. DSS部署-2、环境准备

热门文章

  1. 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《二》cola_os移植
  2. 三分钟快速安装 facebookresearch SlowFast
  3. Random随机生成几位数字和UUID随机生成几位字母加数字组合
  4. 方舟服务器商店系统,《方舟:生存进化》转服系统将上线,一键搬家了解一下!...
  5. 如何利用人工智能技术在零售业做产品创新——京东无人超市的成长之路
  6. 从“青铜”到“王者”,企业数字化上分三大秘诀收好了
  7. 《搞定Excel数据透视表》
  8. 计算几百个数据相乘之积末尾0的个数
  9. 如何一次高效的插入200MB(50万条)的insert语句
  10. DSP28335数据类型