【STL】set容器、pair队组与map容器

目录

1.修改set容器排序规则

2. set容器的各种函数

 3.set构造函数multiset

4.创建pair队组 

5.map容器


1.修改set容器排序规则

set容器会自动以升序的方式进行排序,想要改变可以制定排序规则,set<int,排序规则> s;

但需要注意,在尖括号里面必须是类型,所以可以创建一个类,在类里面来实现我们的排序

#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{
	set<int>::iterator it=s.begin();
	for( ;it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}

class myrule
{
	public:
		bool operator()(int v,int v2)
		{
			return v>v2;
		}
};

void printmyrule(set<int,myrule> &m)
{
	set<int,myrule>::iterator it=m.begin();
	for( ;it!=m.end();it++)
	{
		cout<<*it<<" "; 
	}
	cout<<endl;
}

int main()
{
	set<int> s;//自动以升序排 
	s.insert(10);
	s.insert(30);
	s.insert(20);
	s.insert(50);
	s.insert(60);
	s.insert(40);
	printset(s);
	
	//set<int,排序规则> 
	set<int,myrule> m;//myrule改变排序方式 
	m.insert(10);
	m.insert(30);
	m.insert(20);
	m.insert(50);
	m.insert(60);
	m.insert(40);
	printmyrule(m);
	
	return 0;
 } 

2. set容器的各种函数

  • find(x)函数若查找到返回的是该值的迭代器,若不存在,返回set.end();
  • lower_bound(x)  //下限,返回的是第一个key>=m元素的迭代器
  • upper_bound(x)  //上限,返回的是第一个key>m的迭代器
  • equal_range(x)  //返回x上下限的两个迭代器,所以只能用队组pair的方式来存储上下限

注意:set只有一个键值,也就是说不能有存入两个相同的数据,不然只会输出一个

#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{
	set<int>::iterator it=s.begin();
	for( ;it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}


int main()
{
	set<int> s;//自动以升序排 
	s.insert(10);
	s.insert(30);
	s.insert(20);
	s.insert(50);
	s.insert(60);
	s.insert(40);
	printset(s);
	
	set<int>::iterator ret;
	ret=s.find(50);//因为find()返回的为迭代器,所以要用迭代器来装
	if(ret!=s.end())
	{
		cout<<"找到结果:"<<*ret; 
	} 
	cout<<endl;
	
	set<int>::iterator it;
	it=s.lower_bound(50);
	if(it!=s.end())
	{
		cout<<"下限为:"<<*it<<endl;
	}
	
	set<int>::iterator its;
	its=s.upper_bound(50);
	if(its!=s.end())
	{
		cout<<"上限为:"<<*its<<endl;
	}

	//pair<第一个值类型,第二个值类型>  返回两个值
	//以队组的方式储存上下限 
	 pair<set<int>::iterator,set<int>::iterator> pa;//上下限是以迭代器的方式返回 
	 pa=s.equal_range(50);
	 if(pa.first!=s.end())
	 {
	 	cout<<"下限为:"<<(*pa.first)<<endl; 
	 }
	 if(pa.second!=s.end())
	 {
	 	cout<<"下限为:"<<(*pa.second)<<endl; 
	 }
	return 0;
 } 

 3.set构造函数multiset

  • multiset与set最大的区别在于set不可以有两个相同的值,但multiset可以有相同的数值
  • multiset的头文件依旧为#include<set>

  • 如果有两个相同的值在set里,只会输出一个

4.创建pair队组 

  • pair的头文件可以是STL容器中的任意一个,如:vector、deque、stack、list、set、map,但string除外

5.map容器

  • map返回的有两个,键值k和实值,所以我们使用pair队组来接收map容器的返回值
  • map与set相同,只能有一个k值,不能有重复的,但multimap可以

#include<iostream>
#include<map>
#include<string>
using namespace std;
class student
{
	friend void printmap(map<int,student> &m);
private:
	int num;
	string name;
	float score;
public:
	student(){
	}
	student(int num,string name,float score)
	{
		this->num=num;
		this->name=name;
		this->score=score;
	}
};
void printmap(map<int,student> &m)
{
	map<int,student>::iterator it=m.begin();
	for( ;it!=m.end();it++){
		cout<<(*it).first<<" "<<(*it).second.name<<" "<<(*it).second.score<<endl;
	}
}
int main()
{
	map<int,student> m;
	//方法一: 
	m.insert(pair<int,student>(2000,student(2000,"chen",89.2f)));
	
	//方法二:(推荐)
	m.insert(make_pair(2001,student(2001,"zhang",68.2f)));
	
	//方法三:(危险)使用这个方法要确保m括号里面的k值存在 
	m[2002]=student(2002,"tian",98.2f);
	
	printmap(m);
	return 0;
 } 

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

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

相关文章

Mybatis(搭建,CRUD,方法参数,XML映射文件,动态SQL)【详解】

目录 一.准备基础代码 Mybatis的通用配置 二. 基本CURD操作 1.查询-根据id查询一条 2.查询-查询数量 3.删除 4.新增 获取主键值 5.修改 6.查询-模糊查询 预编译SQL #{}与${}的区别【面试题】 三. Mybatis的方法参数与结果集 1.SQL里取方法参数的值 2.查询结果集…

mac解决brew install报错“fatal: not in a git directory“

在macbook上使用brew安装软件时&#xff0c;可能会遇到问题&#xff0c;报错如下&#xff1a; fatal: not in a git directory Error: Command failed with exit 128: git 使用brew -v&#xff0c;仔细看&#xff0c;可以发现有两个fatal(致命错误)提示: 解决方案&#xff1a;…

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

Nginx、LVS、HAProxy工作原理和负载均衡架构

当前大多数的互联网系统都使用了服务器集群技术&#xff0c;集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务&#xff0c;这些集群可以是 Web 应用服务器集群&#xff0c;也可以是数据库服务器集群&#xff0c;还可以是分布式缓存服务器集群等等。 在实际应用…

ChatGPT提问技巧——对抗性提示

ChatGPT提问技巧——对抗性提示 对抗性提示是一种允许模型生成能够抵御某些类型的攻击或偏差的文本的技术。这种技术可用于训练更健壮、更能抵御某些类型的攻击或偏差的模型。 要在 ChatGPT 中使用对抗性提示&#xff0c;应为模型提供一个提示&#xff0c;该提示的设计应使模…

微信小程序之tabBar

1、tabBar 如果小程序是一个多 tab 应用&#xff08;客户端窗口的底部或顶部有 tab 栏可以切换页面&#xff09;&#xff0c;可以通过 tabBar 配置项指定 tab 栏的表现&#xff0c;以及 tab 切换时显示的对应页面。 属性类型必填默认值描述colorHexColor是tab 上的文字默认颜色…

Web框架开发-Django的视图层

一、视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓…

【QT】TCP简易聊天框

我们首先复习一下TCP通信的流程 基于linuxTCP客户端和服务器 QT下的TCP处理流程 服务器先启动&#xff08;处于监听状态&#xff09; 各函数的意义和使用 QTcpServer Class *QTcpServer*类提供了一个基于TCP的服务器。这个类可以接受传入的TCP连接。您可以指定端口或让QTcpS…

解决无法登录到 ArcGIS Server Administrator

目录 问题复现原因分析解决办法 问题复现 今天在访问arcgisserver后台准备设置arcgis api for js请求路径时&#xff0c;登录之后出现500错误。Services Directoryhttp://xxx.xxx.xxx.xxx:6080/arcgis/admin/system/handlers/rest/servicesdirectory 原因分析 我实在两台虚拟机…

信号与系统学习笔记——信号的分类

目录 一、确定与随机 二、连续与离散 三、周期与非周期 判断是否为周期函数 离散信号的周期 结论 四、能量与功率 定义 结论 五、因果与反因果 六、阶跃函数 定义 性质 七、冲激函数 定义 重要关系 作用 一、确定与随机 确定信号&#xff1a;可以确定时间函数…

提升运营效率,探索运营中台架构的力量

随着数字化转型的加速推进&#xff0c;企业需要更高效地管理和运营各项业务&#xff0c;而运营中台架构作为一种新型的业务架构设计理念&#xff0c;正在逐渐受到关注和应用。本篇博客将深入探讨运营中台架构的概念、优势和实践&#xff0c;帮助企业了解如何通过构建运营中台实…

CVPR2023 | 3D Data Augmentation for Driving Scenes on Camera

3D Data Augmentation for Driving Scenes on Camera 摄像机驾驶场景的 3D 数据增强 摘要翻译 驾驶场景极其多样和复杂&#xff0c;仅靠人力不可能收集到所有情况。虽然数据扩增是丰富训练数据的有效技术&#xff0c;但自动驾驶应用中现有的摄像头数据扩增方法仅限于二维图像…

[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和

目录 一、题目描述&#xff1a; 二、整体思路&#xff1a; 三、代码&#xff1a; 一、题目描述&#xff1a; 二、整体思路&#xff1a; 首先要知道不是他们同时选择序号一样的关卡通关&#xff0c;而是两人同时进行两个入口闯关。就是说两条通道存在相同关卡编号的的关卡被通…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

SQLiteC/C++接口详细介绍之sqlite3类(七)

上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;六&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍之sqlite3类&#xff08;八&#xff09;&#xff08;未发表&#xff09; 22.sqlite3_create_collation、sqlite3_create_collation16和sqlite3_creat…

JavaEE--小Demo

目录 下载包 配置 修改文件 pom.xml application.properties 创建文件 HelloApi.java GreetingController.java Greeting.java DemoApplication.java 运行包 运行命令 mvn package cd target dir java -jar demo-0.0.1-SNAPSHOT.jar 浏览器测试结果 下载包 …

网络安全专题第一篇:网络安全的来源

目录 一.网络安全的由来。 二.网络安全漏洞在哪里 三.网络安全规范操作 1.从业务入手 2.从安全体系入手 3.从管理入手 四.可能遇到的网络攻击 1.DDOS 2.勒索攻击 3.单包攻击 4.员工删库跑路 5.熊猫烧香 五.应对方法 1.清洗 2.提高服务器的承受能力 3.防火墙 4…

证券公司如何应对大数据调度系统的高负载挑战

​在金融行业&#xff0c;数据处理和任务调度是日常运营的重要组成部分。随着业务量的激增&#xff0c;日益增长的任务量和复杂的资源管理需求&#xff0c;要求该系统不仅要稳如磐石&#xff0c;还需灵活高效。 本文将探讨某证券公司在应对这些挑战时所采用的策略&#xff0c;并…

tomcat的webapp文件中发布web应用

一、Web服务器 1.什么是Web 概述&#xff1a; web(World Wide Web)即全球广域网&#xff0c;也称为万维网&#xff0c;它是一种基于超文本和HTTP的、全球性的、动态交百的、跨平台的分布式图形信息系统。是建立在internet上的一种网络服务&#xff0c;为浏览者在Intern…

笔记80:在 Ubuntu 中安装显卡驱动

一、关于显卡的两个基本概念 -- 显卡驱动 / 显卡BIOS &#xff08;1&#xff09;什么是BIOS BIOS的作用&#xff1a;BIOS是电脑上电开机时加载进内存的第一个程序&#xff0c;CPU会执行他进行系统自检&#xff0c;然后通过其中的指令加载操作系统&#xff1b;例如主板BIOS&am…