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容器,没有进行详细说明。主要是为了简单地使用而不是深入研究。

本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
创作不易,如果觉得博主写得不错,请务必点赞、收藏加关注💕💕💕

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

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

相关文章

【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库

C语言的相关问题解答 写在最前面目录 问题1变量名与变量的关系与区别变量和数据类型形参&#xff08;形式参数&#xff09;的概念 问题2解析&#xff1a;主调函数和被调函数延伸解析&#xff1a;主调函数对于多文件程序的理解总结 问题3类和对象变量和数据类型变量是否为抽象的…

ArcGIS中基于人口数据计算人口密度的方法

文章目录 一、密度分析原理二、点密度分析三、线密度分析四、核密度分析一、密度分析原理 密度分析是指根据输入的要素数据集计算整个区域的数据聚集状况,从而产生一个联系的密度表面。通过密度计算,将每个采样点的值散步到整个研究区域,并获得输出栅格中每个像元的密度值。…

嵌入式八股 | 校招秋招 | 笔试面试 | 精选题目

欢迎关注微信公众号【赛博二哈】获取八股PDF 并加入嵌入式求职交流群。提供简历模板、学习路线、岗位整理等 欢迎加入知识星球【嵌入式求职星球】获取完整嵌入式八股。 提供简历修改、项目推荐、求职规划答疑。另有各城市、公司岗位、笔面难题、offer选择、薪资爆料等 嵌入式…

分布式数据恢复-hbase+hive分布式存储误删除如何恢复数据?

hbasehive分布式存储数据恢复环境&#xff1a; 16台某品牌R730XD服务器节点&#xff0c;每台物理服务器节点上有数台虚拟机&#xff0c;虚拟机上配置的分布式&#xff0c;上层部署hbase数据库hive数据仓库。 hbasehive分布式存储故障&初检&#xff1a; 数据库文件被误删除…

十八、初识elasticsearsh (索引)

目录 一、Elasticsearch的介绍&#xff1a; 二、正向索引和倒排索引 1、正向索引 2、倒排索引 3、索引(index) :相同类型的文档的集合 4、映射(mapping):索引中文档的字段约束信息&#xff0c;类似表的结构约束 一、Elasticsearch的介绍&#xff1a; Elasticsearch是一个…

企业数字化转型的作用是什么?_光点科技

在当今快速变化的商业环境中&#xff0c;数字化转型已成为企业发展的重要策略。企业数字化转型指的是利用数字技术改造传统业务模式和管理方式&#xff0c;以提升效率、增强竞争力和创造新的增长机会。 提升运营效率&#xff1a;数字化转型通过引入自动化工具和智能系统&#x…

JVM——产生内存溢出原因

目录 1.产生内存溢出原因一 &#xff1a;代码中的内存泄漏1.案例1&#xff1a;equals()和hashCode()导致的内存泄漏问题&#xff1a;**正常情况**&#xff1a;**异常情况&#xff1a;**解决方案&#xff1a; 2.案例2&#xff1a;内部类引用外部类问题&#xff1a;解决方案&…

计算机网络——网络可靠性及网络出口配置

1. 前言&#xff1a; 学习目标&#xff1a; 1.了解链路聚合的作用 2. 了解ACL的工作原理 3. 了解NAT的工作原理和配置 2. 网络可靠性方案 网络可靠性是指网络在面对各种异常情况或故障时&#xff0c;能够维持正常运行和提供服务的能力。这包括防止网络中断、减小数据丢失的可能…

深入Python元编程:了解声明与初始化定制元类

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 简介 在Python中&#xff0c;元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一&#xff0c;允许您控制类的创建过程。元类是类的类&#xff0c;它控制类的实例化&#xff0c;允许您…

详解Python中print和return的作用及区别

文章目录 关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 print的作用是输出数据到控制端,就是打印在你能看到的…

C51--LCD1602显示屏

LCD602显示&#xff1a; 1、概述 LCD602是一种工业字符型液晶&#xff0c;能够同时显示16x02&#xff0c;即32字符&#xff08;16列&#xff0c;2行&#xff09; 2、引脚&#xff1a; VSS&#xff1a;电源地VDD&#xff1a;电源正极——5V电源VO&#xff1a; 液晶显示偏压 …

给企业做公众号运营你都有哪些宝贵经验?

运营企业公众号需要长期的坚持和不断的创新&#xff0c;如何运营好一个企业公众号&#xff0c;使其成为企业与受众互动、传递价值、提升品牌形象的平台&#xff0c;是许多企业所面临的挑战。但只要不断学习&#xff0c;总结经验&#xff0c;就一定能够找到适合自己企业的公众号…

具有“真实触感”的动捕数据手套mhand pro,提供更精确的动作捕捉

随着人工智能的普及和万物互联&#xff0c;vr虚拟技术备受关注&#xff0c;为了更加真实的虚拟现实交互体验&#xff0c;动捕数据手套的使用逐渐普及&#xff0c;vr手套可以实时采集各手指关节运动数据&#xff0c;使用动捕数据手套可以在虚拟现实的场景中实现对真实手部运动的…

竞赛选题 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正

文章目录 0 简介1 思路简介1.1 车牌定位1.2 畸变校正 2 代码实现2.1 车牌定位2.1.1 通过颜色特征选定可疑区域2.1.2 寻找车牌外围轮廓2.1.3 车牌区域定位 2.2 畸变校正2.2.1 畸变后车牌顶点定位2.2.2 校正 7 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享…

巧妙之中见真章:深入解析常用的创建型设计模式

设计模式之创建型设计模式详解 一、设计模式是什么&#xff1f;二、模板方法2.1、代码结构2.2、符合的设计原则2.3、如何扩展代码2.4、小结 三、观察者模式3.1、代码结构3.2、符合的设计原则3.3、如何扩展代码3.4、小结 四、策略模式4.1、代码结构4.2、符合的设计原则4.3、如何…

模拟火车订票系统---python序列

if __name__ __main__:#创建车辆信息列表list["车次","出发站-到达站","出发时间","到达时间","历时","余票"]trainNumber[T40,T298,Z158,Z62]address[长春-北京,长春-北京,长春-北京,长春-北京]getTime[00:12,0…

3种在ArcGIS Pro中制作山体阴影的方法

山体阴影可以更直观的展现地貌特点&#xff0c;表达真实的地形&#xff0c;这里为大家介绍一下在ArcGIS Pro中制作山体阴影的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见的GIS数据…

Python之数据可视化

文章目录 一、1、matplotlib简单应用1.1、绘制带有中文标签和图例的图1.2、 绘制散点图1.3、绘制饼状图1.4、多个图形一起显示 一、 1、matplotlib简单应用 matplotlib模块依赖于numpy模块和tkinter模块&#xff0c;可以绘制多种形式的图形&#xff0c;包括线图、直方图、饼状…

【Linux】匿名管道与命名管道,进程池的简易实现

文章目录 前言一、匿名管道1.管道原理2.管道的四种情况3.管道的特点 二、命名管道1. 特点2.创建命名管道1.在命令行上2.在程序中 3.一个程序执行打开管道并不会真正打卡 三、进程池简易实现1.makefile2.Task.hpp3.ProcessPool.cpp 前言 一、匿名管道 #include <unistd.h&g…

线性代数的艺术

推荐一本日本网友Kenji Hiranabe写的《线性代数的艺术》。这本书是基于MIT大牛Gilbert Strang教授的《每个人的线性代数》制作的。 虽然《线性代数的艺术》这本书仅仅只有12页的内容&#xff0c;就把线性代数的重点全画完了&#xff0c;清晰明了。 《线性代数的艺术》PDF版本&…