【C++中STL】set/multiset容器

news2024/9/26 1:16:22

set/multiset容器

  • Set基本概念
    • set构造和赋值
    • set的大小和交换
    • set的插入和删除
    • set查找和统计
  • set和multiset的区别
    • pair对组
      • 两种创建方式
  • set容器排序

Set基本概念

所有元素都会在插入时自动被排序。
set/multist容器属于关联式容器,底层结构属于二叉树。
set不允许容器中有重复的元素,multiset允许容器中有重复的元素。

set构造和赋值

1、set<T> st;默认构造函数
2、set(const set &st);拷贝构造函数
3、set& operator=(const set &st);赋值

void test1() {
	set<int> st;
	st.insert(10);
	st.insert(40);
	st.insert(30);
	st.insert(1);
	st.insert(30);
	p(st);
	set<int> s2(st);
	p(s2);
	set<int> s3;
	s3= s2;
	p(s3);
}

在这里插入图片描述

set的大小和交换

1、empty();判断容器是否为空
2、size();返回容器中元素的个数
3、swap(st);交换两个集合容器

void test1() {
	...
	if (!st.empty()) {
		cout << "大小" << st.size()<<endl;
	}
	set<int> s2;
	s2.insert(32);
	s2.insert(23);
	s2.insert(43);
	st.swap(s2);
	p(st);
}

set的插入和删除

1、insert(elem);插入,只有这一种方法
2、clear();清空所有元素
3、erase(pos);删除pos位置的元素,返回下一个数据的位置
4、erase(beg,end);删除迭代器从beg到end之间的元素,返回下一个数据的位置
5、erase(elem);删除容器中值为elem的元素

void test1() {
...
	st.erase(st.begin());
	st.erase(++st.begin(), --st.end());
	p(st);
	st.erase(10);
	p(st);
	st.clear();
	p(st);
}

在这里插入图片描述

set查找和统计

1、find(key);查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,返回set.end()
2、count(key);统计key的元素个数

void test1() {
	...
	set<int>::iterator pos=st.find(40);
	if (pos != st.end()) {
		cout << "找到:" <<*pos<< endl;
	}
	else {
		cout << "没找到" << endl;
	}
	cout << st.count(30) << endl;//统计的结果式0或1
}

在这里插入图片描述

set和multiset的区别

1、set不可以插入重复数据,multiset可以
2、set插入数据的同时会返回插入结果,表示插入成功
3、multiset不会监测数据,因此可以插入重复数据

void test1() {
	set<int> st;
	pair<set<int>::iterator, bool> ret = st.insert(30);
	if (ret.second) {
		cout << "第一次插入成功" << endl;
	}
	else {
		cout << "第一次插入失败" << endl;
	}
	ret=st.insert(30);
	if (ret.second) {
		cout << "第二次插入成功" << endl;
	}
	else {
		cout << "第二次插入失败" << endl;
	}
}

在这里插入图片描述

	m.insert(10);//直接插入不会检测
	m.insert(10);
	for (multiset<int>::const_iterator it = m.begin();it != m.end();it++) {

		cout << (*it) << "   ";
	}
	cout << endl;

在这里插入图片描述
返回是一个对组
在这里插入图片描述
在这里插入图片描述

multiset插入返回的是一个迭代器
在这里插入图片描述

pair对组

两种创建方式

1、pair<type,type> p(value1,value2);
2、pair<type,type> p=make_pair(value1,value2);

void test() {
	pair<string, int>p("Tom", 20);
	cout << "姓名:" << p.first << "年龄:" << p.second << endl;
	pair<string, int>p1=make_pair("Ala", 23);
	cout << "姓名:" << p1.first << "年龄:" << p1.second << endl;
}

set容器排序

在使用仿函数排序时,需要加const不可修改,不然会报错,set的排序规则下定义是需要设置好,默认是升序。

class S {
public:
	int age;
	string name;
	int h;
	S(string _n, int _a,int _h) {
		name = _n;
		age = _a;
		h = _h;
	}
};
class compareS {
public:
	bool operator()(S v1, S v2) const{
		return v1.age > v2.age;
	}
};
class MyCompare {
public:
	bool operator()( int v1, int v2)const {
		return v1 > v2;
	}
};
//内置类型排序
void test1() {
	//指定排序规则为大到小
	set<int,MyCompare> s2;
	s2.insert(10);
	s2.insert(40);
	s2.insert(30);
	s2.insert(1);
	s2.insert(30);
	for (set<int,MyCompare>::iterator it = s2.begin();it != s2.end();it++) {
		cout << (*it) << "   ";
	}
}
//自定义类型排序
void test() {
	set<S, compareS> s;
	S s1("Tom", 18, 187);
	S s2("Lisa", 20, 165);
	S s3("LuJy", 34, 190);
	S s4("Tony", 21, 167);
	S s5("Ala", 20, 168);
	s.insert(s1);
	s.insert(s2);
	s.insert(s3);
	s.insert(s4);
	s.insert(s5);
	for (set<S, compareS>::iterator it = s.begin();it != s.end();it++) {
		cout << "姓名:" << (*it).name << "\t年龄:" << (*it).age << "\t身高:" << (*it).h << endl;
	}
}

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

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

相关文章

spring cloud之分布式事务

写在前面 1&#xff1a;分布式事务介绍 参考MySQL之分布式事务 。 2&#xff1a;seata实战 架构图&#xff1a; 可以看到seata在这里作为协调者的角色&#xff0c;协调所有事务的提交以及回滚&#xff0c;其中seata使用MySQL存储每个分支事务的执行状态信息&#xff0c;以…

GIT使用,看它就够了

一、目的 Git的熟练使用是一个加分项&#xff0c;本文将对常用的Git命令做一个基本介绍&#xff0c;看了本篇文章&#xff0c;再也不会因为不会使用git而被嘲笑了。 二、设置与配置 在第一次调用Git到日常的微调和参考&#xff0c;用得最多的就是config和help命令。 2.1 gi…

腾讯云4核16G幻兽帕鲁服务器多少钱?

腾讯云幻兽帕鲁服务器4核16G14M配置&#xff0c;14M公网带宽&#xff0c;限制2500GB月流量&#xff0c;系统盘为220GB SSD盘&#xff0c;优惠价格66元1个月&#xff0c;277元3个月&#xff0c;支持4到8个玩家畅玩&#xff0c;地域可选择上海/北京/成都/南京/广州&#xff0c;腾…

机器学习和可视化还能一起这样用?Python教你全搞定

今天这篇推文&#xff0c;我们继续空间数据可视化的最后一个系列-类别插值(categorical-spatial-interpolation) 可视化绘制的推文教程&#xff0c;这期我们使用Python进行绘制&#xff0c;涉及的知识点如下&#xff1a; sklearn.KNeighborsClassifier()机器学习应用 plotnine…

4JS表达式和运算符expression and operator

表达式&#xff08;expression&#xff09;JavaScript中的一个短语&#xff0c;JavaScript解释器会将其计算&#xff08;evaluate&#xff09;出一个结果。程序中的常量是最简单的一类表达式。变量名也是一种简单的表达式&#xff0c;它的值就是赋值给变量的值。复杂表达式是由…

【第二天】蓝桥杯备战

题 1、星期一2、顺子日期3、修剪灌木4、最少砝码 1、星期一 https://www.lanqiao.cn/problems/611/learning/ 解法&#xff1a;星期一的天数总共的天数/7 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void ma…

AutoGen实战应用(二):多代理协作(Multi-Agent Collaboration)

AutoGen是微软推出的一个全新工具&#xff0c;它用来帮助开发者创建基于大语言模型(LLM)的复杂应用程序. AutoGen能让LLM在复杂工作流程启用多个角色代理来共同协作完成人类提出的任务。在我之前的一篇博客: AutoGen实战应用(一)&#xff1a;代码生成、执行和调试 中我们通过一…

Web3:B站chainlink课程Lesson5遇到的小坑汇总

ethers代码 我用的ethers.js 6 &#xff0c;和视频里一样用的是5的不用看代码部分 ethers.providers.JsonRpcProvider("server") //无了 ethers.JsonRpcProvider("server") //现在的wallet.getTransactionCount() //无了 wallet.getNonce() //现在的Big…

springboot的actuator

1、actuator简介 微服务的特点决定了功能模块的部署是分布式的&#xff0c;大部分功能模块都是运行在不同的机器上&#xff0c;彼此通过服务调用进行交互&#xff0c;前后台的业务流会经过很多个微服务的处理和传递&#xff0c;出现了异常如何快速定位是哪个环节出现了问题&am…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉语言导航

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉…

字符串相关函数【超详细】(strcpy,strstr等string.h中的函数)

文章目录 strlen库中函数定义函数作用函数大概“工作”流程函数使用注意&#xff08;要求&#xff09;函数使用例举 strcpy库中函数定义函数作用函数使用注意&#xff08;要求&#xff09;函数大概“工作”流程函数使用例举 strcat库中函数定义函数作用函数使用注意&#xff08…

【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]

阅读导航 引言一、特殊类 --- 不能被拷贝的类1. C98方式&#xff1a;2. C11方式&#xff1a; 二、特殊类 --- 只能在堆上创建对象的类三、特殊类 --- 只能在栈上创建对象的类四、特殊类 --- 不能被继承的类1. C98方式2. C11方法 总结温馨提示 引言 在面向对象编程中&#xff0…

【计网·湖科大·思科】实验三 总线型以太网的特性、集线器和交换机的区别、交换机的自学习算法

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

kubeadm部署k8s1.27.2版本高可用集群(外部etcd集群带TLS认证)

文章目录 环境软件版本服务器系统初始化etcd 证书生成etcd集群部署负载均衡器部署部署k8s集群部署网络组件FAQ 环境 控制平面节点主机的配置最少是2C2G,否则kubeadm init的时候会报错 主机名IP组件系统os128192.168.177.128etcd、kubeadm、kube-apiserver、kube-controller-m…

Vue3 pinia全解(上)

pinia是什么&#xff1f; 如果你学过Vue2&#xff0c;那么你一定使用过Vuex。我们都知道Vuex在Vue2中主要充当状态管理的角色&#xff0c;所谓状态管理&#xff0c;简单来说就是一个存储数据的地方&#xff0c;存放在Vuex中的数据在各个组件中都能访问到&#xff0c;它是Vue生…

【学术论文写作 笔记02】 鲁棒性实验写作的行文逻辑

文章目录 一、声明二、行文思路三、示例范文一范文二 一、声明 自己总结的&#xff0c;有问题望指正&#xff01; 二、行文思路 为什么要做鲁棒性测试怎么做实验结论对结果的解释 三、示例 PPT 范文一 2022, TIM, “A Robust and Reliable Point Cloud Recognition Netw…

Java零基础学习22:static关键字

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、static的初步应用场景 我们开始时不使用static直接用public赋值&#xff…

租户认证系统中心设计与实践

租⼾认证中⼼设计、需求背景 1. 由于客⼾&#xff0c;租⼾之间缺乏严肃的关系&#xff0c;导致从经营⻆度看不清客⼾对于公司产品的真实使⽤情况&#xff0c;对于客⼾运营也造成⼀定影响。 2. 在各个业务产品中实际存在⼀些客⼾需要完善⾃⾝资料的场景&#xff0c;但这些场景收…

上位机图像处理和嵌入式模块部署(c/c++ opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 opencv可以运行在多个平台上面&#xff0c;当然windows平台也不意外。目前来说&#xff0c;opencv使用已经非常方便了&#xff0c;如果不想自己编译…

ANSYS 2023 下载安装教程,附安装包和工具,轻松安装,无套路

前言 ANSYS是一款融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析(FEA)软件&#xff0c;能与多数计算机辅助设计软件接口&#xff0c;实现数据的共享和交换&#xff0c;如Creo,NASTRAN、Algor、IDEAS、AutoCAD等. 准备工作 1、Win10及以上系统 2、提前准备好…