【C++关联容器】set的成员函数

news/2024/4/26 7:45:48/文章来源:https://blog.csdn.net/Qiuhan_909/article/details/130344415

目录

set

1. 构造、析构和赋值运算符重载

1.1 构造函数

1.2 析构函数

1.3 赋值运算符重载

2. 迭代器

3. 容量

4. 修改器

5. 观察者

6. 操作

7. 分配器


set

set是按照特定顺序存储唯一元素的容器。

在一个set中,一个元素的值也是它的标识(值本身就是关键字,类型为T),并且每个值必须是唯一的。一旦在容器中,集合中的元素的值就不能被修改(元素总是不变的),但是它们可以被插入或从容器中移除。

在内部,set中的元素总是按照其内部比较对象(Compare类型)所指示的特定的严格的弱排序标准进行排序。

set容器通常比unordered_set容器通过键来访问单个元素要慢一些,但是它们允许根据子集的顺序来直接迭代。

set通常被实现为二叉搜索树。

使用set类型要包含set头文件;set定义在命名空间std中。

1. 构造、析构和赋值运算符重载

1.1 构造函数

重载函数功能
empty构造空的set类对象
range用迭代器区间[first,last)中的元素构造

copy

构造一个x的拷贝
move移动构造函数
initializer list用初始化列表来构造
#include <iostream>
#include <set>
using namespace std;int main()
{set<int> s1;//emptyfor (auto e : s1){cout << e << " ";}cout << endl;//空int arr[10] = { 4,2,2,9,6,6,6,1,7,10 };set<int> s2(arr, arr + 10);//rangefor (auto e : s2){cout << e << " ";}cout << endl;//1 2 4 6 7 9 10set<int> s3(s2);//copy//等价于set<int> s3 = s2;for (auto e : s3){cout << e << " ";}cout << endl;//1 2 4 6 7 9 10set<string> s4{ "happy","new","year","hello","world" };//initializer list//等价于set<string> s4 = { "happy","new","year","hello","world" };for (auto e : s4){cout << e << " ";}cout << endl;//happy hello new world yearreturn 0;
}

1.2 析构函数

1.3 赋值运算符重载

2. 迭代器

函数功能

begin

&

end

begin返回一个迭代器,指向set对象的第一个元素

end返回一个迭代器,指向set对象的最后一个元素的下一个位置

rbegin

&

rend

rbegin返回一个反向迭代器,指向set对象的最后一个元素

rend返回一个反向迭代器,指向set对象的第一个元素的上一个位置

cbegin

&

cend

cbegin返回一个const迭代器,指向set对象的第一个元素

cend返回一个const迭代器,指向set对象的最后一个元素的下一个位置

crbegin

&

crend

crbegin返回一个const反向迭代器,指向set对象的最后一个元素

crend返回一个const反向迭代器,指向set对象的第一个元素的上一个位置

begin&end和rbegin&rend返回的迭代器指向:

const_iterator是一个指向const内容的迭代器。迭代器本身可以修改,但是它不能被用来修改它所指向的内容。

begin&end/rbegin&rend和cbegin&cend/crbegin&crend的不同:

  • begin&end/rbegin&rend的返回类型由对象是否是常量来决定。如果不是常量,返回iterator;如果是常量,返回const_iterator。
  • cbegin&cend/crbegin&crend的返回类型是const_iterator,不管对象本身是否是常量。

但是set的迭代器是const的!!!虽然set类型同时定义了iterator和const_iterator类型,但两种类型都只允许只读访问set中的元素。

#include <iostream>
#include <set>
using namespace std;int main()
{int arr[10] = { 4,2,2,9,6,6,6,1,7,10 };set<int> s(arr, arr + 10);set<int>::iterator it = s.begin();while (it != s.end()){cout << *it << " ";++it;}cout << endl;//1 2 4 6 7 9 10auto rit = s.rbegin();//list<int>::reverse_iterator rit = lt.rbegin();while (rit != s.rend()){cout << *rit << " ";++rit;}cout << endl;//10 9 7 6 4 2 1return 0;
}

3. 容量

函数功能
empty检测set是否为空,是返回true,否则返回false
size

返回set的元素个数

max_size返回set所能容纳的最大元素数
#include <iostream>
#include <set>
using namespace std;int main()
{int arr[10] = { 4,2,2,9,6,6,6,1,7,10 };set<int> s(arr, arr + 10);//1 2 4 6 7 9 10if (s.empty())cout << "set为空" << endl;elsecout << "set不为空" << endl;//set不为空cout << s.size() << endl;//7cout << s.max_size() << endl;//214748364return 0;
}

4. 修改器

函数功能
insert插入元素
erase删除元素
swap交换内容
clear清空内容
emplace构建和插入元素
emplace_hint构建和插入带有提示的元素
#include <iostream>
#include <set>
using namespace std;int main()
{int arr[10] = { 4,2,2,9,6,6,6,1,7,10 };set<int> s1(arr, arr + 10);//1 2 4 6 7 9 10s1.insert(5);s1.insert(0);for (auto e : s1){cout << e << " ";}cout << endl;//0 1 2 4 5 6 7 9 10s1.erase(--s1.end());s1.erase(4);for (auto e : s1){cout << e << " ";}cout << endl;//0 1 2 5 6 7 9set<int> s2{ 7,3,6,8,1 };s1.swap(s2);for (auto e : s1){cout << e << " ";}cout << endl;//1 3 6 7 8s1.clear();if (s1.empty())cout << "s1被清空" << endl;elsecout << "s1没被清空" << endl;//s1被清空return 0;
}

5. 观察者

函数功能
key_comp返回比较对象
value_comp返回比较对象

6. 操作

函数功能
find获取元素的迭代器
count

计算特定元素的数量

返回值0或1

lower_bound返回指向下限的迭代器
upper_bound返回指向上限的迭代器
equal_range

获取相等元素的范围

范围内只有一个元素

#include <iostream>
#include <set>
using namespace std;int main()
{int arr[10] = { 4,2,2,9,6,6,6,1,7,10 };set<int> s(arr, arr + 10);//1 2 4 6 7 9 10auto it = s.find(2);if (it != s.end()){cout << "2在set中" << endl;}else{cout << "2不在set中" << endl;}//2在set中it = s.find(3);if (it != s.end()){cout << "3在set中" << endl;}else{cout << "3不在set中" << endl;}//3不在set中if (s.count(7)){cout << "7在set中" << endl;}else{cout << "7不在set中" << endl;}//7在set中if (s.count(5)){cout << "5在set中" << endl;}else{cout << "5不在set中" << endl;}//5不在set中return 0;
}

7. 分配器

函数功能
get_allocator获取分配器

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

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

相关文章

mybatis中大数据量foreach插入效率对比

1.controller代码 RequestMapping("/testInsert")public String testInsert(Integer sum){testService.testInsert(sum);return "发送成功";}2.service代码 Overridepublic void testInsert(Integer sum) {long start System.currentTimeMillis();List<…

修炼汇编语言第一章:汇编基础知识概述

目录 前言 一、汇编语言的组成 二&#xff1a;存储器 三&#xff1a;指令和数据 四&#xff1a;存储单元 五&#xff1a;CPU对存储器的读写 地址总线 控制总线 数据总线 前言 汇编语言是数据结构&#xff0c;操作系统&#xff0c;微机原理等重要课程的基础&#xff0…

QT中TCP的学习

文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的&#xff0c;我们只需要写相应的槽函数 A、服务器&#xff1a; 创建QTcpServer对象启动服务器&#xff08;监听&…

【C语言】指针进阶[上] (字符、数组指针、指针数组、数组传参和指针传参)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 字符指针 面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名 VS 数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二…

后端大厂面试总结大全六

目录&#xff1a; 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用&#xff0c;导致Transactional失效 举…

操作系统原理 —— 进程状态切换具体做了哪些事情?(八)

什么是进程控制&#xff1f; 进程控制的主要功能是&#xff1a;对系统中的所有进程实施有效的管理&#xff0c;它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简单来说&#xff0c;就是进程控制就是要现实进程状态的转换。 那如何实现进程的控制呢&#xff1f;…

手推FlinkML2.2(一)

Java 快速入门 # 本文档提供了一个关于如何使用Flink ML的快速入门。阅读本文档的用户将被指导提交一个简单的Flink作业&#xff0c;用于训练机器学习模型并提供预测服务。 求助&#xff0c;我卡住了&#xff01;# 如果你遇到困难&#xff0c;请查看社区支持资源。特别是&…

Java线程间通信方式

前文了解了线程的创建方式和状态切换&#xff0c;在实际开发时&#xff0c;一个进程中往往有很多个线程&#xff0c;大多数线程之间往往不是绝对独立的&#xff0c;比如说我们需要将A和B 两个线程的执行结果收集在一起然后显示在界面上&#xff0c;又或者比较典型的消费者-生产…

【论文写作】如何写引言?应该思考什么问题?总体架构!!!

结构 大多数的科技论文都聚焦于简单地说明&#xff0c;做了什么&#xff0c;发现了什么&#xff1f;虽然这个可以帮助你写出一篇研究型论文当中的核心的东西&#xff08;方法论和结果&#xff09;&#xff0c;但是不能完全把引言的部分完成。在这篇文章当中&#xff0c;将展示…

4 redis高可用

所谓的高可用&#xff0c;也叫HA&#xff08;High Availability&#xff09;&#xff0c;是分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计减少系统不能提供服务的时间。如果在实际生产中&#xff0c;如果redis只部署一个节点&#xff0c;…

从FMCW毫米波雷达系统的性能参数理解4D成像毫米波雷达的设计思路

本文编辑&#xff1a;调皮哥的小助理 站在设计雷达的角度看&#xff0c;其实无论是传统的3D毫米波雷达&#xff0c;还是如今的4D毫米波成像雷达&#xff0c;其雷达系统性能参数都遵循一个原则&#xff0c;即&#xff1a; d res ⋅ v res ⋅ θ res d max ⁡ ⋅ v max ⁡ ⋅ …

ESP8266通过MQTT协议连接onenet云平台

中国移动onenet平台 文章目录 中国移动onenet平台前言一、onenet平台二、ESP82661.完整代码2.联网代码3.连云代码4.数据处理 总结 前言 最近在弄onenet平台&#xff0c;用arduino结合esp8266&#xff0c;就是不知道怎么回事&#xff0c;一直连不上wifi&#xff0c;然后就用esp…

Linux下使用Mysql 第一天

目录 安装mysql 更改账户名和密码 启动/关闭mysql mysql的基本操作 数据库CURD 创建数据库 查看数据库 修改数据库 删除数据库 表的CURD 创建表 查看表 修改表 删除表 表数据的CURD create数据 Retrieve数据 update数据 delete数据 DML和DDL的区别&#xf…

高分辨率光学遥感图像水体分类综述2022.03

本文是Water body classification from high-resolution optical remote sensing imagery: Achievements and perspectives的学习笔记。 相关资源被作者整理到&#xff1a;这里 文章目录 Introduction基本知识 挑战和机遇挑战1. 有限的光谱信息和小场景覆盖2. 形状、大小和分布…

【JAVA-模块五 数组】

JAVA-模块五 数组 一、数组&#xff08;一维&#xff09;1.1数组是什么&#xff1f;1.2java中数组静态初始化&#xff1a;&#xff08;存&#xff09;两种定义格式&#xff1a;数组初始化格式&#xff1a;静态初始化后&#xff0c;打印数组名&#xff1a; 1.3 数组元素访问&…

javaweb学生在线考试系统dzkf10程序

打分&#xff09;、系统管理&#xff08;数据备份&#xff09;等功能操作。 以学生的身份在登录页面输入账号和密码&#xff0c;经过数据库身份验证&#xff0c;验证成功后登录系统主页&#xff0c;可以使用个人资料管理、试卷查看、在线考试、在线答疑、个人考试成绩查询等功能…

Oracle的学习心得和知识总结(二十三)|Oracle数据库Real Application Testing之Database Replay相关视图

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

LVS负载均衡-DR

1.DR模式中每台主机都有一个VIP地址 虚拟网址放在lo网卡上&#xff08;回环网卡&#xff09; arp_ignore1 Arp_announce2 系统不使用IP包的源地址来设置ARP请求的源地址&#xff0c;而选择发送接口的IP地址 2.内核参数修改 3.vim /etc/rc.conf 开机自启动 Chmod x /etc/rc.d…

【翻译一下官方文档】之uniapp的导航条设置

目录 uni.setNavigationBarTitle(OBJECT) uni.setNavigationBarColor(OBJECT) uni.hideHomeButton(OBJECT) uni.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题。 OBJECT参数说明 参数类型必填说明titleString是页面标题successFunction否接口调用成功的回调函数fai…

卷积神经网络总结

1、卷积核 进行互相关运算。 卷积核的大小一般是奇数。 卷积核的本质类似于提取局部特征&#xff08;过滤器&#xff09;&#xff0c;当层层卷积核叠加后&#xff0c;卷积核的感受野变大&#xff0c;卷积核的作用逐渐向提取全局抽象特征靠近。最后一层的神经元应该对整个输入…