C++中set容器的基本使用----在B站听黑马程序员c++课程的记录
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容器在插入时默认排序规则为从小到大,利用仿函数可改变排序规则。插入时就改变。
- 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++) {}
- 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.first
和p.second
C++中set容器的基本使用----在B站听黑马程序员c++课程的记录相关推荐
- 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中
目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...
- SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...
@SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...
- 黑马程序员中的简单网页制作
前言 黑马程序员中的简单网页制作 代码如下(示例): <!DOCTYPE html> <html lang="en"><head><met ...
- 黑马程序员,黑马论坛 ------JAVA中的反射机制
文章来源:黑马程序员,黑马论坛 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法 ...
- 黑马程序员---Java 容器集合
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 集合: 1.map 映射表的基本思想是它维护的是键-值(对)关联,因此程序员可以 ...
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 黑马程序员-java-高新技术中《九》
--Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- 一:注解 1.注解(Annotation) 注解相当一个类或接口,每一个注解 ...
- linux中波浪号代表什么_Linux有什么吸引力,在程序员中如此受欢迎?
在过去的几十年里,操作系统已经取得了很大的前进.曾经由微软Windows或苹果macOS主导的操作系统,现在已不再是常态. 千禧年之后,随着人们对核算环境的探索,各种操作系统开端发挥作用.Linux是 ...
- 面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试
在如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?这篇博文后,提到了不少引导的说辞和技巧,如果能把面试官的提问引导到事先准备好的亮点上,一方面确实可以更有效地耗费面试时间,另一方面也 ...
最新文章
- C++核心编程(一)
- 虚拟机网络连接方式linuxcentos
- 国家发改委就数据基础制度征求意见 鼓励互联网企业开放公共属性数据
- flannel源码分析--WatchLeases
- 浅谈promise用es5实现
- JQuery中一些常用函数的运用
- 安卓文件共享服务器,安卓文件共享云服务器
- 实体以及实体型和实体集
- 手机调试python的软件_Appium+Python(ios真机移动端App H5混合自动化实战测试)
- 什么从什么写短句_新年新气象跨年了,准备好发什么说说了吗
- 如何快速成为C++工程师?
- mysql C where语句_MYSQL WHERE语句优化
- 阿里P7跳槽后曝光薪资截图:新公司月入税后五万多,很满足!
- 并不对劲的AC自动机
- C# 线程调用主线程中的控件
- ERP库存管理 华夏
- 秋招之8.31农行研发中心笔试
- 高音符號的由來是怎樣的
- 机器学习在饿了么竞价广告中的实践
- DSS部署-2、环境准备
热门文章
- 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《二》cola_os移植
- 三分钟快速安装 facebookresearch SlowFast
- Random随机生成几位数字和UUID随机生成几位字母加数字组合
- 方舟服务器商店系统,《方舟:生存进化》转服系统将上线,一键搬家了解一下!...
- 如何利用人工智能技术在零售业做产品创新——京东无人超市的成长之路
- 从“青铜”到“王者”,企业数字化上分三大秘诀收好了
- 《搞定Excel数据透视表》
- 计算几百个数据相乘之积末尾0的个数
- 如何一次高效的插入200MB(50万条)的insert语句
- DSP28335数据类型