Day19 C++STL入门基础知识十一——map、multimap容器 构造赋值、大小交换、插入删除、查找统计、排序【全面深度剖析+例题代码展示】

news2024/11/28 12:55:04

💃🏼 本人简介:男
👶🏼 年龄:18
✍每日一句:【道固远,笃行可至;事虽巨,坚为必成】

文章目录

  • 1. 基本概念
  • 2. 构造赋值
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 3. 大小交换
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 4. 插入删除
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 5. 查找统计
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 6. 排序
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 最后,感谢大家支持u (^ _ ^)

1. 基本概念

  • 所有元素都是两个两个出现的pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值),通过key值找到value值
  • 按键值自动排序
  • multimap可以插入重复的key值

2. 构造赋值

① 函数原型

  • map<T1, T2> m; 默认构造
  • map(const map &m); 拷贝构造

② 代码展示

#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;

void printMap(const map<int, int> m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << (*it).first << " value = " << it->second << endl;  //
	}   cout << endl;
}

//构造、赋值
void text01() {
	//默认构造
	map<int, int> m;
	m.insert(pair<int, int>(3, 10));
	m.insert(pair<int, int>(2, 20));
	m.insert(pair<int, int>(4, 30));
	m.insert(pair<int, int>(1, 40));
	m.insert(pair<int, int>(1, 50));
	printMap(m);	//自动按照key值由小到大排序

	//拷贝构造
	map<int, int> m2(m);
	printMap(m2);

	//赋值操作
	map<int, int> m3;
	m3 = m2;
	printMap(m3);
}

int main() {
	text01();
	return 0;
}

③ 测试结果

在这里插入图片描述

3. 大小交换

① 函数原型

  • size(); 返回容器元素数目
  • empty(); 判空
  • swap(st); 交换两个集合容器

② 代码展示

#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;

void printMap(const map<int, int> m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << (*it).first << " value = " << it->second << endl;  //
	}   cout << endl;
	//cout << "------------------------------------------------------" << endl;
}

//大小、交换
void text02() {
	map<int, int> m1;
	m1.insert(pair<int, int>(1, 10));
	m1.insert(pair<int, int>(2, 15));
	m1.insert(pair<int, int>(3, 25));
	m1.insert(pair<int, int>(4, 30));

	cout << "m1容器大小为: " << m1.size() << endl;
	if (m1.empty()) cout << "m容器为空" << endl;
	else cout << "m1容器不为空" << endl;

	map<int, int> m2;
	m2.insert(pair<int, int>(5, 40));
	m2.insert(pair<int, int>(4, 50));
	m2.insert(pair<int, int>(8, 60));
	m2.insert(pair<int, int>(6, 70));
	cout << "交换前: " << endl;
	cout << "m1为: " << endl;  printMap(m1); cout << "m2为: " << endl; printMap(m2);
	m1.swap(m2);
	cout << "交换后: " << endl;
	cout << "m1为: " << endl; printMap(m1); cout << "m2为: " << endl;  printMap(m2);
}
int main(){
	text02();
	return 0;
}

③ 测试结果

在这里插入图片描述

4. 插入删除

① 函数原型

  • insert(elem); 插入元素
  • clear(); 清空
  • erase(pos); 删除迭代器所指的元素,并返回下一个迭代器
  • erase(beg, end); 删除区间[beg, end)的所有元素,返回下一个元素的迭代器
  • erase(key); 删除容器中值为key的元素

② 代码展示

#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;

void printMap(const map<int, int> m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << (*it).first << " value = " << it->second << endl;  //
	}   cout << endl;
	//cout << "------------------------------------------------------" << endl;
}

void text03() {
	map<int, int> m;
	//插入
	//第一种pair()
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(2, 20));
	m.insert(pair<int, int>(3, 30));
	m.insert(pair<int, int>(4, 40));
	//第二种make_pair
	m.insert(make_pair(5, 50));
	//第三种::value_type
	m.insert(map<int, int>::value_type(6, 60));
	//第四种[]
	m[7] = 70;
	printMap(m);

	//删除
	m.erase(3);  //删除为key元素的值
	printMap(m);

	m.erase(++ m.begin() , m.end());
	printMap(m);

	m.clear();
	printMap(m);
}
int main(){
	text03();
	return 0;
}

③ 测试结果

5. 查找统计

① 函数原型

  • find(key); 查找key是否存在
    • 若存在,则返回元素的迭代器
    • 不存在,返回map.end();
  • count(key); 统计key的个数

② 代码展示

#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;

void printMap(const map<int, int> m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << (*it).first << " value = " << it->second << endl;  //
	}   cout << endl;
	//cout << "------------------------------------------------------" << endl;
}

void text04() {
	map<int, int> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(4, 40));
	m.insert(make_pair(4, 40));
	m.insert(make_pair(4, 40));

	//查找
	map<int, int>::iterator pos = m.find(3);
	if (pos != m.end()) cout << "查找到了" << endl;
	else cout << "未查找到" << endl;
	
	//统计
	int cnt = m.count(4);
	cout <<"key为4的个数为:" << cnt << endl;  //不允许插入重复key
}

③ 测试结果

在这里插入图片描述

6. 排序

① 函数原型

② 代码展示

#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;

class cmp {
public:
	bool operator()(int x, int y)const{
		return x > y;
	}//从大到小排
};

void text05() {
	map<int, int, cmp> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(4, 40));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));
	
	for (map<int, int, cmp>::iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << (*it).first << " value = " << it->second << endl;
	}
}

③ 测试结果

在这里插入图片描述

最后,感谢大家支持u (^ _ ^)

如果感觉这篇文章对你有帮助的话,不妨三连支持下,十分感谢(✪ω✪)。

printf("点个赞吧*^*");
cout << "收藏一下叭o_o";
System.out.println("评论一下吧^_^");
print("关注一下叭0-0")

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

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

相关文章

基于tensorflow的垃圾分类系统

项目描述 该项目基于PySide2和PyQt5设计界面UI&#xff0c;搭配QT Designer进行界面设计。 基于TensorFlow中的Keras模型&#xff0c;进行垃圾分类模型的训练。 项目包含功能有&#xff1a;使用者注册登录功能、管理员训练模型、用户使用模型进行分类。 功能介绍 一、注册登…

JVM调优

JVM调优-VisualVmVisualVm/ Jconsule远程连接第一种方式第二种方式&#xff1a;java 11开启远程GC连接如果还连不上考虑防火墙拦截了端口firewall-cmd --list-all,查看一下并暴露对应端口连接配置VisualVm界面简介采集GC信息的一些命令垃圾回收器切换VisualVm/ Jconsule远程连接…

unity 框选目标

先制作选框&#xff1a; 创建一个Image&#xff0c;给Sourece Image随便添加一张方形图片&#xff0c;如果添加圆的出来就是圆&#xff0c;这个看情况而定&#xff0c;然后勾掉Fill Center这样就镂空了 这种框选一般都是作为组件存在所以代码要做成单例类&#xff0c;默认情况…

【Mysql第十期 数据类型】

文章目录1. MySQL中的数据类型2.类型介绍2.2 可选属性2.2.2 UNSIGNED2.2.3 ZEROFILL2.3 适用场景2.4 如何选择&#xff1f;3. 浮点类型3.2 数据精度说明3.3 精度误差说明4. 定点数类型4.1 类型介绍4.2 开发中经验5. 位类型&#xff1a;BIT6. 日期与时间类型6.1 YEAR类型6.2 DAT…

程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #

编译与链接前言程序的环境程序的编译与链接写在最后前言 每当我们运行一段代码时&#xff0c;编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件&#xff08;.exe&#xff09;&#xff0c; 有了这个可执行文件&#xff0c;便可以执行我们写的程序了。那么编译…

Linux-Ubuntu18.04安装anaconda及python解释器环境的配置

1.anaconda的下载anaconda官网搜索链接&#xff0c;点击下载注意&#xff1a;anaconda的下载位置2.anaconda的安装利用如下命令进行安装&#xff1a;$ bash /home/xiaowang/下载/Anaconda3-2022.10-Linux-x86_64.sh一直点击回车enter&#xff0c;阅读文件内容文件阅读完毕&…

canal五部曲-如何保证消息的顺序

分析CanalRocketMQProducer.send canal发送消息到RocketMQ使用到了partitionNum、partitionHash 通过partitionHash可以把消息发送到RocketMQ的不同分区上&#xff0c;因为同一个分区在消费时有序的 public void send(final MQDestination destination, String topicName, com.…

2020年因果推断综述《A Survey on Causal Inference》

最近阅读了TKDD2020年的《A Survey on Causal Inference》&#xff0c;传送门&#xff0c;自己对文章按照顺序做了整理&#xff0c;同时对优秀的内容进行融合&#xff0c;如有不当之处&#xff0c;请多多指教。 文章对因果推理方法进行了全面的回顾&#xff0c;根据传统因果框…

威胁情报是什么

文章目录前言一、威胁情报是什么&#xff1f;数据与情报IOC二、威胁情报的分类1.战略情报2.技术情报3.战术情报4.运营情报三、总结四、参考前言 只要有斗争冲突&#xff0c;就有那些研究、分析和努力去了解对手的人。一场战争的输赢&#xff0c;取决于你对对手的了解&#xff0…

springboot启动过程源码

概述版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version><relativePath/></parent>启动入口代码package com.ybjdw.tool;i…

如何解决混合精度训练大模型的局限性问题

混合精度已经成为训练大型深度学习模型的必要条件&#xff0c;但也带来了许多挑战。将模型参数和梯度转换为较低精度数据类型&#xff08;如FP16&#xff09;可以加快训练速度&#xff0c;但也会带来数值稳定性的问题。使用进行FP16 训练梯度更容易溢出或不足&#xff0c;导致优…

【王道数据结构】第六章(下) | 图的应用

目录 一、最小生成树 二、最短路径 三、有向⽆环图描述表达式 四、拓扑排序 五、关键路径 一、最小生成树 1、最小生成树的概念 对于一个带权连通无向图G &#xff08;V,E)&#xff0c;生成树不&#xff0c;每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所…

【2023】Prometheus-接入Alertmanager并实现邮件告警通知

目录1.使用二进制方式安装Alertmanager2.Alertmanager配置3.alert接入prometheus4.创建告警配置文件&#xff08;在prometheus服务器&#xff09;5.测试告警1.使用二进制方式安装Alertmanager 下载安装包 wget https://github.com/prometheus/alertmanager/releases/download…

Python pip工具使用

一、pip工具 1、pip简介 pip 是一个通用的 Python包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能&#xff0c;便于我们对 Python的资源包进行管理。 在安装 Python时&#xff0c;会自动下载并且安装 pip。 &#xff08;1&#xff09;查看是否安装 pip 查看…

C/C++ :程序环境和预处理(上)

目录 程序的编译链接过程 1.编译过程中的预处理阶段 2.编译过程中的正式编译阶段 3.编译过程中的汇编阶段 4.链接过程 程序的编译链接过程 一个程序的源码文件要经过复杂的编译链接过程才能被转换为可执行的机器指令(二进制指令) 编译链接过程概述&#xff1a; 编译过程&…

java顺序存储二叉树应用实例

八大排序算法中的堆排序&#xff0c;就会使用到顺序存储二叉树。 1.线索化二叉树 1.1先看一个问题 将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树. n17 问题分析: 当我们对上面的二叉树进行中序遍历时&#xff0c;数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8, 10, 14 这几个…

windows装双系统,添加ubuntu

1、查看分区 此电脑右键---管理----磁盘管理----选有空闲位置的硬盘右键----压缩卷 就会出现空闲的卷 2 制作U盘&#xff0c;U盘初始是空的 下载rufus win10系统怎么查看磁盘分区形式 【百科全说】 (bkqs.com.cn) 双击打开----如下配置 出现这个提示&#xff0c;照做 …

内存数据库Apache Derby、H2

概述 传统关系型数据库涉及大量的工作&#xff0c;如果想在Java应用程序里使用MySQL数据库&#xff0c;至少需要如下步骤&#xff1a; 安装&#xff08;可选&#xff1a;配置用户名密码&#xff09;建表&#xff08;要么从命令行进入&#xff0c;要么安装一个可视化工具&…

Java基础-网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统…

Springboot扩展点之InstantiationAwareBeanPostProcessor

前言前面介绍了Springboot的扩展点之BeanPostProcessor&#xff0c;再来介绍另一个扩展点InstantiationAwareBeanPostProcessor就容易多了。因为InstantiationAwareBeanPostProcessor也属于Bean级的后置处理器&#xff0c;还继于BeanPostProcessor&#xff0c;因此Instantiatio…