C++之关联式容器set和map的使用

目录

1、set的使用​编辑

1、初始化

2、遍历

3、查找​编辑

4、插入​编辑

5、不支持修改与下标

2、map的使用

1、初始化​编辑

2、遍历

3、map的下标(重点)


 

#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <utility>
#include <string>using std::cout;
using std::endl;
using std::vector;
using std::set;
using std::map;
using std::pair;
using std::string;void test()
{/* vector<int> vec; *//* vec.push_back(1); *///set的基本特征//1、元素是唯一的,不能重复//2、默认情况下,元素会按照从小到大的顺序进行排列//3、set的底层使用的是红黑树结构////初始化set<int> number2;set<int> number = {1, 2, 5, 7, 9, 8, 5, 3, 2};//迭代器(看成是一个指针)//遍历set<int>::iterator it;for(it = number.begin(); it != number.end(); ++it){cout << *it << "  ";}cout << endl;//auto可以让编译器自动推导变量的类型/* auto a = 10; *//* auto s1 = "hello"; *//* auto b;//error */for(auto &elem : number){cout << elem << "  ";}cout << endl;cout << endl << "set的查找" << endl;size_t cnt1 = number.count(7);size_t cnt2 = number.count(10);cout << "cnt1 = " << cnt1 << endl;cout << "cnt2 = " << cnt2 << endl;/* auto it2 = number.find(3); */set<int>::iterator it2 = number.find(3);if(it2 == number.end())//迭代器判空{cout << "该元素不存在" << endl;}else{cout << "该元素存在, *it2 = "  << *it2 << endl;}cout << endl << "set的插入操作" << endl;pair<set<int>::iterator, bool> ret = number.insert(6);if(ret.second){cout << "插入成功 : " << *ret.first << endl;}else{cout << "插入失败" << endl;}for(auto &elem : number){cout << elem << "  ";}cout << endl;cout << endl << endl;vector<int> vec = {1, 4, 20, 10, 7, 0};number.insert(vec.begin(), vec.end());for(auto &elem : number){cout << elem << "  ";}cout << endl;/* cout << endl << endl; *///set不支持下标访问/* cout << "number[0] = " << number[0] << endl;//error */cout << endl << endl;it = number.begin();++it;++it;cout << "*it = " << *it << endl;/* *it = 100;//error,不能修改 */
}void test00()
{pair<int, string> number = {1, "hello"};cout << number.first << "     " << number.second << endl;
}void test2()
{//map的特征://1、存放的是key-value类型,也就是pair类型,//key值是唯一的,不能重复//2、默认情况下, 会按照key值进行升序排列//3、map底层使用的也是红黑树////初始化map<int, string> number = {pair<int, string>(1, "hello"),pair<int, string>(4, "hello"),pair<int, string>(2, "world"),{5, "wangdao"},{3, "wuhan"},{1, "hello"},};//遍历map<int, string>::iterator it;for(it = number.begin(); it != number.end(); ++it){cout << it->first << "  " << it->second << endl;}cout << endl << endl;for(auto &elem : number){cout << elem.first << "  " << elem.second << endl;}cout << endl << endl;cout << endl << "map的查找" << endl;size_t cnt1 = number.count(3);size_t cnt2 = number.count(7);cout << "cnt1 = " << cnt1 << endl;cout << "cnt2 = " << cnt2 << endl;/* auto it2 = number.find(3); */map<int,string>::iterator it2 = number.find(3);if(it2 == number.end())//迭代器判空{cout << "该元素不存在" << endl;}else{cout << "该元素存在, *it2 = "  << it2->first << "    "<< it2->second << endl;}cout << endl << "map的插入操作" << endl;pair<map<int, string>::iterator, bool> ret = number.insert(pair<int, string>(6, "kiki"));if(ret.second){cout << "插入成功 : " << ret.first->first << "   "<< ret.first->second << endl;}else{cout << "插入失败" << endl;}for(auto &elem : number){cout << elem.first << "  " << elem.second << endl;}cout << endl << endl;cout << "number[0] = " << number[0] << endl;//插入cout << "number[5] = " << number[5] << endl;//查找cout << endl << endl;for(auto &elem : number){cout << elem.first << "  " << elem.second << endl;}cout << endl << endl;number[0] = "zhongguo";//修改number[1] = "zhongguo";//修改for(auto &elem : number){cout << elem.first << "  " << elem.second << endl;}}int main(int argc, char **argv)
{test2();return 0;
}

test的运行结果:

1  2  3  5  7  8  9
1  2  3  5  7  8  9set的查找
cnt1 = 1
cnt2 = 0
该元素存在, *it2 = 3set的插入操作
插入成功 : 6
1  2  3  5  6  7  8  90  1  2  3  4  5  6  7  8  9  10  20*it = 2

test2的运行结果:

1  hello
2  world
3  wuhan
4  hello
5  wangdao1  hello
2  world
3  wuhan
4  hello
5  wangdaomap的查找
cnt1 = 1
cnt2 = 0
该元素存在, *it2 = 3    wuhanmap的插入操作
插入成功 : 6   kiki
1  hello
2  world
3  wuhan
4  hello
5  wangdao
6  kikinumber[0] =
number[5] = wangdao0
1  hello
2  world
3  wuhan
4  hello
5  wangdao
6  kiki0  zhongguo
1  zhongguo
2  world
3  wuhan
4  hello
5  wangdao
6  kiki

1、set的使用

1、初始化

2、遍历

3、查找

4、插入

5、不支持修改与下标

2、map的使用

1、初始化

2、遍历

3、map的下标(重点)

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

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

相关文章

2023预测误差位平面冗余-RDHEI Based on Bit-Plane

RRBE 本文仅供学习&#xff0c;切勿转载和搬运&#xff0c;如有侵权&#xff0c;联系立删~ 一、背景知识 The Gradient-Adjusted Predictor&#xff08;GAP&#xff0c;梯度调整预测器&#xff09; 根据被预测像素周围的七个像素进行预测 具体流程可参考文献X. Wu and N. M…

selenium4的相对定位

selenium4相对定位 Selenium 4新增了相对定位器&#xff0c;能帮助用户查找元素附近的其他元素。可用的相对定位器有above、below、toLeftOf、toRightOf、near。在Selenium 4中&#xff0c;find_element方法能够接受一个新方法withTagName&#xff0c;它将返回一个RelativeLoca…

项目管理必备的五张图表,助力你高效掌控全局

在项目管理中&#xff0c;图表作为一种直观的工具&#xff0c;帮助项目经理更有效的规划、监控和控制项目的各个方面&#xff0c;以下是项目经理常用的几张图表&#xff0c;它们在项目管理中发挥着至关重要的作用。 1、甘特图 甘特图&#xff08;Gantt Chart&#xff09;是最…

C语言——oj刷题——猜数字游戏

当用C语言来实现猜数字游戏时&#xff0c;我们可以设计一个简单的游戏规则&#xff1a;计算机随机生成一个1到100之间的整数&#xff0c;玩家需要通过猜测来猜出这个数字。游戏会根据玩家猜测的数字与目标数字的大小关系给出提示&#xff0c;直到玩家猜中为止。 下面是一个用C…

类体相关知识

定义 类声明之后的一对大括号“{”&#xff0c;“}” 以及它们之间 的内容称作 &#xff0c;大括号之间的内容称作类体的内容。 组成部分 变量的声明&#xff1a;用来刻画属性 。 方法的定义&#xff1a;用来刻画行为功能

2023年12月CCF-GESP编程能力等级认证Python编程七级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(每题 2 分,共 30 分) 第1题 假设变量 x 为 float 类型,如果下面代码输入为 100,输出最接近( )。 A.0 B.-5 C.-8 D.8 答案:B 第2题 对于下面动态规划方法实现的函数,以下选项中…

VR科学知识互动展示介绍|游戏体验馆加盟|VR展示厅

VR科学知识互动展示是一种利用虚拟现实技术来呈现科学知识并与观众进行互动的展示方式。通过VR设备&#xff0c;参观者可以沉浸在各种科学主题的虚拟环境中&#xff0c;以全新的视角和体验来探索科学领域的知识。 这样的展示通常结合了视觉、听觉和触觉等感官体验&#xff0c;使…

springboot-异步、定时、邮件任务

一、异步任务 1、创建项目 2、创建一个service包 3、创建一个类AsyncService 异步处理还是非常常用的&#xff0c;比如我们在网站上发送邮件&#xff0c;后台会去发送邮件&#xff0c;此时前台会造成响应不动&#xff0c;直到邮件发送完毕&#xff0c;响应才会成功&#xff…

1.2_1 分层结构、协议、接口和服务

1.2_1 分层结构、协议、接口和服务 &#xff08;一&#xff09;为什么要分层&#xff1f; 主机A如果想要向主机B发送文件&#xff0c;则一定要经过中间的一些介质、链路。 发送文件前要完成的工作&#xff1a; 1.发起通信的计算机必须将数据通信的通路进行激活。 所谓的激活&a…

多线程系列(十五) -常用并发工具类详解

一、摘要 在前几篇文章中&#xff0c;我们讲到了线程、线程池、BlockingQueue 等核心组件&#xff0c;其实 JDK 给开发者还提供了比synchronized更加高级的线程同步组件&#xff0c;比如 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 等并发工具类。 下面我们一起来…

OJ_空闲块

题干 C实现 /** 输入样例&#xff1a; 12 1024 2048 8192 512 16384 1024 32768 8192 65536 8192 77824 1024 80896 3072 86016 1024 91136 5120 99328 512 104448 1024 112640 3072 1024 2560 10240 512 1024 6400 512 -1 输出样例&#xff1a; 104448 1024 112640 3072 1024…

字节后端实习 一面凉经

心脏和字节永远都在跳动 深圳还有没有大厂招后端日常实习生啊&#xff0c;求捞&#xff5e;&#xff08;boss小公司也不理我&#xff09; 很纠结要不要干脆直接面暑期实习&#xff0c;又怕因为没有后端实习经历&#xff0c;面不到大厂实习。死锁了

SpringMVC-请求与响应(附Servlet相关接口替换方案)

1.请求 1.请求参数 SpringMVC将传递的参数封装到处理器方法的形参中&#xff0c;达到快速访问参数的目的 1.普通类型参数传参 page.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <body> <h1>请…

从零学习Linux操作系统 第三十一部分 ansible常用模块介绍

一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理&#xff0c;主要用于临时命令使用场景 playbook方式 ##ansible脚本&#xff0c;主要用于大型项目场景&#xff0c;需要前期的规划&#xff0c;相当于shell当中的脚本 二、如何查看模块帮助 ansible…

基于Java springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

DNS服务与管理

1. 规划节点 部署主从节点DNS服务的节点规划 IP主机名节点192.168.100.10master主DNS服务器192.168.100.20slave从DNS服务器 2. 基础准备 使用VMWare Workstation软件安装CentOS 7.2操作系统&#xff0c;镜像使用提供的 CentOS-7-x86_64-DVD-1511.iso&#xff0c;最小化Cen…

mysql从旧表 取出部分列并保存到新表几种方式介绍

在MySQL中&#xff0c;从旧表取出部分列并保存到新表有多种方式&#xff0c;主要包括以下几种&#xff1a; 1. 使用INSERT INTO ... SELECT语句&#xff1a; 这是最常用的方法。通过SELECT语句从旧表中选择需要的数据&#xff0c;然后使用INSERT INTO语句将数据…

shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Shell编程专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时&#xff0c…

MySQL 缓存策略

MySQL 缓存方案用来干什么 ? 缓存用户定义的热点数据&#xff0c;用户直接从缓存中获取热点数据&#xff0c;降低数据的读写压力。场景分析 内存访问速度是磁盘访问速度的 10 万倍。读的需求远远大于写的需求MySQL 自身缓冲层跟业务无关。MySQL 作为项目主要数据库&#xff0…

Cookie 探秘:了解 Web 浏览器中的小甜饼

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…