set与map
set与map
- 一、序列式容器与关联式容器
- 二、pair
- 1、键值对
- 2、作用
- 3、构造函数
- 4、make_pair
- (1)构造函数
- (2)作用
- 5、代码
- 6、运行结果
- 三、set
- 1、概念
- 2、代码
- 3、运行结果
- 4、说明
- 四、multiset
- 1、与set的关系
- 2、代码
- 3、运行结果
- 五、map
- 1、概念
- 2、代码
- 3、运行结果
- 六、multimap
- 1、与map的关系
- 2、代码
- 3、运行结果
一、序列式容器与关联式容器
- 序列式容器和关联式容器都是STL中的容器,它们之间主要的区别在于存储内部元素的方式不同。
- 序列式容器按照元素插入的顺序进行存储元素的操作,即元素在容器中的位置与其被插入的先后顺序是一致的,底层为线性序列的数据结构。例如vector、list和deque等等容器。
- 关联式容器通过比较关键字来对元素进行有序存储,而关键字可以是内置类型,也可以是自定义类型,只要关键字能够进行比较即可。例如set、map、multiset和multimap容器就是树型结构的关联式容器,它们使用平衡搜索树(红黑树)作为其底层结构,容器中的元素是一个有序的序列。
- 关联式容器在进行数据检索时,它的效率比序列式容器高。
二、pair
1、键值对
用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value代表与key对应的信息。
2、作用
- 此类将一对值耦合在一起,这些值可能属于不同的类型(T1 和 T2)。
- 可以通过此类的公共成员first 和second 访问它们(耦合在一起的T1和T2类型的两个变量)。
3、构造函数
4、make_pair
(1)构造函数
(2)作用
- 构造一个pair 对象,其第一个元素设置为x,第二个元素设置为y。
- 一般创建pair对象时,会比较喜欢使用make_pair去创建。因为用pair创建对象时,需要显式传递参数的类型,而make_pair可以自己推导参数的类型。
5、代码
void test_pair()
{pair<int, int> p1;pair<int, int> p2(10, 20);pair<int, int> p3(p2);cout << p1.first << ":" << p1.second << endl;cout << p2.first << ":" << p2.second << endl;cout << p3.first << ":" << p3.second << endl;p1 = make_pair(30, 40);cout << p1.first << ":" << p1.second << endl;
}
6、运行结果
三、set
1、概念
- set中只存放元素值(key),但在底层实际存放的是由<key, key>构成的键值对。
- set按照一定次序存储元素,即按照其内部比较对象所指示的特定严格弱排序准则进行排序,默认按照小于来比较。
- 元素的值(key)也标识它,即该值就是它本身的键值,每个元素的值都必须是唯一的,即插入元素时不需要构造键值对。
- set中的元素不能在容器中修改,但是可以在容器中插入或者删除它们。
2、代码
void test_set()
{set<int> se;se.insert(5);se.insert(15);se.insert(8);se.insert(3);se.insert(10);se.insert(7);set<int>::iterator it = se.begin();while (it != se.end()){//(*it)++;cout << *it << " ";++it;}cout << endl;cout << se.erase(3) << endl;cout << se.erase(70) << endl;for (auto e : se){cout << e << " ";}cout << endl;int x;while (cin >> x){/*auto ret = se.find(x);if (ret != se.end())cout << x << "存在" << endl;elsecout << x << "不存在" << endl;*///cout << se.count(x) << endl;if(se.count(x))cout << x << "存在" << endl;elsecout << x << "不存在" << endl;}
}
3、运行结果
4、说明
- set的使用和其他STL容器的使用类似。
- 代码中count函数为统计x元素在set中出现的次数,但因为set中元素唯一,所以x存在则返回1,否则返回0。代码中注释部分代码的作用和它一样。
四、multiset
1、与set的关系
- multiset与set基本一致,只是multiset存储的元素是可以重复的。
2、代码
void test_multiset()
{multiset<int> mse;mse.insert(5);mse.insert(5);mse.insert(15);mse.insert(8);mse.insert(8);mse.insert(3);mse.insert(10);mse.insert(8);mse.insert(7);set<int>::iterator it = mse.begin();while (it != mse.end()){//(*it)++;cout << *it << " ";++it;}cout << endl;cout << mse.count(5) << endl;cout << mse.count(8) << endl;cout << mse.count(7) << endl;
}
3、运行结果
五、map
1、概念
- map按照特定的次序(使用key来比较,默认是小于)存储由键值key和值value组合而成的元素(即键值对)。
- 键值key通常用于排序和作为唯一的标识元素,值value存储的是与此键值key关联的内容。键值key和值value的类型可以是不相同的。
- map支持下标访问,即在[]中输入key值,就可以找到key和value组成的键值对。如果查找的key值的键值对不存在,则会构造一个键值对并插入容器中,其中value用匿名对象初始化。[]返回的是键值对中value的引用。
- map中的key是唯一的,并且不能对其进行修改。
2、代码
void test_map1()
{map<string, string> mp;mp.insert(make_pair("hello", "你好"));mp.insert(make_pair("snow", "雪"));mp.insert(make_pair("dragon", "龙"));mp["left"];mp["right"] = "右";for (auto& kv : mp){cout << kv.first << ":" << kv.second << endl;}cout << endl;mp["left"] = "左,左边";mp["right"] = "右,右边";for (auto& kv : mp){cout << kv.first << ":" << kv.second << endl;}
}void test_map2()
{map<string, int> mp;string arr[] = { "苹果","西瓜","猕猴桃","苹果","香蕉","西瓜","苹果","梨" };for (auto& e : arr){++mp[e];}for (auto& kv : mp){cout << kv.first << ":" << kv.second << endl;}
}
3、运行结果
六、multimap
1、与map的关系
- multimap与map基本一致,只是multimap存储的元素是可以重复的,即key可以重复。
- multimap中没有重载operator[],即multimap不支持使用[]进行下标访问。
2、代码
void test_multimap()
{multimap<string, string> mtp;mtp.insert(make_pair("hello", "你好"));mtp.insert(make_pair("hello", "你好呀"));mtp.insert(make_pair("snow", "雪"));mtp.insert(make_pair("snow", "雪白"));mtp.insert(make_pair("dragon", "龙"));for (auto& kv : mtp){cout << kv.first << ":" << kv.second << endl;}cout << endl;
}
3、运行结果
本文只是简单介绍了如何使用set与map容器,没有进行详细说明。主要是为了简单地使用而不是深入研究。
本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
创作不易,如果觉得博主写得不错,请务必点赞、收藏加关注💕💕💕
相关文章:

set与map
set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair(1)构造函数(2)作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map…...

基于单片机智能液位水位监测控制系统
**单片机设计介绍, 基于单片机智能液位水位监测控制系统 文章目录 一 概要特点应用场景工作原理实现方式 系统功能实时监测控制调节报警功能数据记录与分析 总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 ## 系统介绍 基于单片机…...

C#,《小白学程序》第十七课:随机数(Random)第四,移动平均值(Moving Average)的计算方法与代码
1 文本格式 /// <summary> /// 《小白学程序》第十七课:随机数(Random)第四,移动平均值的计算方法与代码 /// 继续学习数据统计,移动平均值的计算方法 /// 移动平均值就是一定步长内数值的平均值,用…...

行情分析——加密货币市场大盘走势(11.29)
大饼已经形成了底背离,即MACD往下走,而价格还在往上走,这种后续往往会大跌。继续把空单拿好,已经持仓的无需加仓。多次上涨却一直不能突破,说明多空和空军力量都很强,等待后续出方向。在笔者看来࿰…...
C++——string的字符串比较,字符存取,插入和删除和子串
一. string字符串比较 功能描述:字符串之间的比较 比较方式:字符串比较是按字符的ASCII码进行对比 返回 0 > 返回 1 < 返回 -1 函数原型: *int compare(const string &s) const; //与字符串s比较 *int compare(const char *s) const; //…...

字节10年经验之谈 —— 从0到1开发自动化测试框架!
一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…...
Mysql(基本介绍+下载安装+服务器+基本使用+建库建表+navicat/mybitas工具+外键及实例)
一、Mysql基本介绍 当谈论MySQL时,通常指的是一个流行的开源关系型数据库管理系统(RDBMS)。MySQL是由瑞典的开发者在1995年创建的,后来被Sun Microsystems收购,最终成为Oracle Corporation的一部分。以下是关于MySQL的…...

Python+requests+Jenkins接口自动化测试实例
在做功能测试的基础上,我平时也会用postman测试接口,不过postman只能测试一个一个接口,不能连贯起来,特别是我们公司的接口很多都是要用到token的,导致我每次测个需要登录的接口都要去获取到token,做了很多…...

SpringBoot3核心原理
SpringBoot3核心原理 事件和监听器 生命周期监听 场景:监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…...
JS常用数据类型转换(数字型和字符串型之间转换)
提供了5中基本数据类型:数字 number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 常用的是数字型和字符串型之间的转换,常用的转换方法如下: 1 数字型转换成字符串型 a) 使用String()方法…...

算法通关村第一关—青铜挑战—用Java基本实现各种链表操作
文章目录 第一关—链表【青铜挑战】1.1 单链表的概念1.2 链表的相关概念1.3 创建链表 - Java实现1.4 链表的增删改查1.4.1 遍历单链表 - 求单链表长度1.4.2 链表插入 - 三种位置插入(1)在链表的表头插入(2)在链表的中间插入&#…...

SparkRDD及算子-python版
RDD相关知识 RDD介绍 RDD 是Spark的核心抽象,即 弹性分布式数据集(residenta distributed dataset)。代表一个不可变,可分区,里面元素可并行计算的集合。其具有数据流模型的特点:自动容错,位置…...

嵌入式设备与PC上位机通信协议设计的几点原则
嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种: 从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。 一&am…...

Go 内置运算符
一、算数运算符 1、算数运算符使用 package mainimport ("fmt" )func main(){fmt.PrintIn("103",103) //10313fmt.PrintIn("10-3",10-3) //10-37fmt.PrintIn("10*3",10*3) //10*330//除法注意:如果运算的数都是…...

Table和HashBasedTable的使用案例
------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…...

【执行批处理后 executeBatch() 没反应,一个参数相信就能搞定】
一、场景是在使用EasyExcel读取全表时,每次手动提交事务6w多条,总计190w数据量的情况下发生的。 博主比较fw,卡住了两天😶 此问题还有一个比较bug的地方,就是当你在 executeBatch() 上下打断点时还能够执行出来&…...

【LeetCode】每日一题 2023_11_25 二叉树中的伪回文路径(dfs,数组/位运算)
文章目录 刷题前唠嗑题目:二叉树中的伪回文路径题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 这个月第一次周末早起~ 题目:二叉树中的伪回文路径 题目链接:1457. 二…...

什么是海外私人IP代理?是纯净独享的代理吗?
相信许多互联网工作者都遇到过IP禁令,比如网络抓取项目,使用共享代理服务器向网站发出第一个请求,但却您收到了禁令,这大部分是由于你的共享IP经过多人使用被禁用所致。 那么到底什么是私人代理呢?它们是否适合您的情…...
Vue组件库推荐:Element UI深度解析
在Vue开发中,使用组件库可以极大地提高开发效率,减少重复工作量。Element UI作为一款优秀的Vue组件库,被广泛应用于各类项目中。本文将对Element UI进行深度解析,为开发者提供详细的使用说明和具体的代码示例。 1,Ele…...

Mysql 8.0主从复制模式安装(兼容Mysql 5.7)
Mysql V8.0.35安装 官网地址:MySQL :: Download MySQL Community Server 下载【Mysql 8.0.35】压缩包 解压压缩包,仅保留6个安装文件即可 mysql-community-client-8.0.31-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm my…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...