C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

C++中 map的了解与基本用法(代码演示)

一:map的基本认识

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。

二:map的基本操作函数(建议了解map常用的函数 以后用到啥 再学啥)

C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数

三:map常用函数的代码演示

1: map最基本的构造函数 map<关键字,键值> mapint

							 map<string , int >mapstring;         map<int ,string >mapint;map<sring, char>mapstring;         map< char ,string>mapchar;map<char ,int>mapchar;            map<int ,char >mapint;

2:插入数据

#include<bits/stdc++.h>
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 map<int,string>m;//	m[1]++;
//	m[2]++;// 插入数据 // 第一种方法:cout << "*****************************" << endl;cout << "第一种方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t;
//	for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl;//t->first表示关键字,t->second 表示键值	} cout << "*****************************" << endl;cout << "第二种方法插入 !" << endl;m[1] = "stu1";m[2] = "stu2";m[3] = "stu3";for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl;	} } 

3:查找数据

#include<bits/stdc++.h>
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 map<int,string>m;//	m[1]++;
//	m[2]++;// 插入数据 // 第一种方法:cout << "*****************************" << endl;cout << "第一种方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t;cout << "*****************************" << endl;cout << "查找 !" << endl; t = m.find(1);if(t != m.end()){cout << "查找成功!" << endl;	}else{cout << "查找失败!" << endl; }} 

4:删除数据

#include<bits/stdc++.h>
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 map<int,string>m;//	m[1]++;
//	m[2]++;// 插入数据 // 第一种方法:cout << "*****************************" << endl;cout << "第一种方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t;for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl;	} cout << "*****************************" << endl;cout << "删除 !" << endl; t =  m.find(2);m.erase(t);for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl;	} 	
} 

5:运行结果

在这里插入图片描述

四:map用法的补充

1.将map容器中(默认的递增顺序,改为递减的顺序(这里的顺序指的是关键值))

#include<bits/stdc++.h>
using namespace std;int main(){std::map<int, int, std::greater<int> > m;  //map默认的递增 ,这样改成递减的 
//在创造map时,增加参数 **std::greater<int>**,就变成增加int a[5] = {5,4,3,2,1};map<int,int>::iterator t; for(int i = 0; i < 5; i++){m[i] = a[i];}for(t = m.begin(); t != m.end(); t++){cout << ' ' << t->first << ' ' << t->second << endl; } }

在这里插入图片描述

2:利用map容器实现一对多

  /**思路:我们想要的结果是  一对多  即一个人对应好几个课程号,可以用到map<string,vector<int>>	我还考虑了vector<int>v[2500],但是vector中不能表示成 一个字符串对应好几个数所以选择了map */
#include<bits/stdc++.h>
using namespace std;int main(){int N,K;map<string,vector<int> >m; // 注意vector<int> 后面得加上空格 map<string,vector<int> >::iterator t;scanf("%d%d",&N,&K);for(int i = 1; i <= K; i++){int nums,a;//	cin >> i >> nums;scanf("%d%d",&a,&nums);//这里不要输入 i即便i是从1开始的for(int j = 0; j < nums; j++){//	string str;//	cin >> str;char ch[6];scanf("%s",ch);m[ch].push_back(a);		}	}for(int i = 0; i < N; i++){char name[6];scanf("%s",name);printf("%s %d",name,m[name].size()); //m[name].size() 输出一个人选择了多少门课程 sort(m[name].begin(),m[name].end());//		for(int temp : m[name]){
//			printf(" %d",temp);
//		}for(int j = 0; j < m[name].size(); j++){cout << ' ' << m[name][j]; } printf("\n");}}

3:利用map容器

m[num] 其默认值是为0;

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

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

相关文章

[Redis6]跳跃表(跳表)

跳跃表(跳表) 简介 有序集合在生活中比较常见&#xff0c;例如根据成绩对学生排名&#xff0c;根据得分对玩家排名等。对于有序集合的底层实现&#xff0c;可以用数组、平衡树、链表等。数组不便元素的插入、删除&#xff1b;平衡树或红黑树虽然效率高但结构复杂&#xff1b;…

mysql 5.5 免安装_mysql 5.5.56免安装版配置方法

mysql 5.5.56免安装版配置方法&#xff0c;本文通过文字代码详解&#xff0c;具体内容如下所示&#xff1a;1. 下载mysql-5.5.56-winx64网址: dev.mysql.com/downloads/mysql/2. 解压MySQL压缩包将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:"D:\Program File…

ASP.NET Core中的响应压缩

介绍响应压缩技术是目前Web开发领域中比较常用的技术&#xff0c;在带宽资源受限的情况下&#xff0c;使用压缩技术是提升带宽负载的首选方案。我们熟悉的Web服务器&#xff0c;比如IIS、Tomcat、Nginx、Apache等都可以使用压缩技术&#xff0c;常用的压缩类型包括Brotli、Gzip…

7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析

7-14 电话聊天狂人 (25 分)map做法 1&#xff1a;题目 给定大量手机用户通话记录&#xff0c;找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N&#xff08;≤10 ​5 ​​ &#xff09;&#xff0c;为通话记录条数。随后N行&#xff0c;每行给出一条通话记录…

[Redis6]配置文件详解

配置文件 单位 配置大小单位,开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit 大小写不敏感 INCLUDES包括 类似jsp中的include&#xff0c;多实例的情况可以把公用的配置文件提取出来 网络相关配置 bind 默认情况bind127.0.0.1只能接受本机的…

连接不上mysql 1045_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析

原创作者&#xff1a; 管长龙 译作者&#xff1a;Carlos Tutte、Marcos Albe 翻译&#xff1a;管长龙在我们学习 MySQL 或从事 MySQL DBA 工作期间&#xff0c;时常会遇到&#xff1a;“我尝试连接到 MySQL 并且收到1045 错误&#xff0c;但我确定我的用户和密码都没问题”。不…

JWT是个什么鬼?

【答疑解惑】| 作者 / Edison Zhou这是恰童鞋骚年的第269篇原创内容前面一篇我们了解了微服务安全认证架构是如何演进而来的&#xff0c;但是发现v2.5架构仍然较重&#xff0c;有没有轻量级一点的方法呢&#xff1f;其实业界早已有了实践&#xff0c;它就是基于JWT的安全认证架…

java中编译类型的方法 和 运行时的类型方法 有什么区别

1&#xff1a;引言 这是在复习多态当中&#xff0c;看到不太理解的东西&#xff0c; 就是 Java编译类型和运行类型 2&#xff1a;多态 多态首先得是在 有继承关系和方法重写的类当中&#xff1b;指同一个方法在被调用时&#xff0c;由于对象不同则会有不同的效果&#xff08…

[Redis6]发布和订阅

Redis6的发布和订阅 什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 发布订阅命令行实现 打开一个客户端订阅channel1 打开另一个客户端&…

mysql innodb log_教你如何理解mysql中的innoDB log

前言:之前一直弄不清楚mysql里面bin log和innodb log文件的区别&#xff0c;在脑子里面一直有个疑问binlog日志文件已经可以用来进行数据库的日志备份恢复了&#xff0c;怎么又多了一个redo log文件了。相信也有很多人有这个疑惑&#xff0c;现在把整个过程文档整理出来&#x…

解决Java当中 用point 画图时背景颜色变成黑色问题

一&#xff1a;导入与源码 package src.cn.wyj.飞机;import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame;public class MyGame1 extends JF…

微服务框架Demo.MicroServer运行手册

一.背景说明&#xff1a;之前分享过一个微服务开发框架&#xff0c; “分享一个集成.NET CoreSwaggerConsulPollyOcelotIdentityServer4ExceptionlessApolloSkyWalking的微服务开发框架”&#xff0c;前两天在Github上收到一个Issues&#xff0c;是想我这边提供下完整的运行文档…

[Redis6]新数据类型_Bitmaps

Bitmaps 简介 现代计算机用二进制&#xff08;位&#xff09; 作为信息的基础单位&#xff0c; 1个字节等于8位&#xff0c; 例如“abc”字符串是由3个字节组成&#xff0c; 但实际在计算机存储时将其用二进制表示&#xff0c; “abc”分别对应的ASCII码分别是97、 98、 99&a…

mysql qps如何查看_一款查看mysql QPS的脚本

本脚本黏贴就可以使用绝对不坑人&#xff01;&#xff01;&#xff01;(此脚本来源如一位大神网友)执行效果&#xff1a;脚本&#xff1a;#!/bin/bashPWEqipay20150504mysqladmin -P3306 -uroot -p$PW -r -i 1 ext |\awk -F"|" \"BEGIN{ count0; }"\{ if($…

C++中判断在字符串中是否存在空格 以及 如何输入带空格的字符串

1&#xff1a;引言&#xff1a; 输入带空格的字符串 需要用到 getline(cin,str);具体在代码中看 2&#xff1a;上码 #include<bits/stdc.h> using namespace std;int main(){vector<string>v1;for( int i 0; i < 2; i ){string temp;getline(cin,temp);//输…

.Net Core 自定义配置源从配置中心读取配置

配置&#xff0c;几乎所有的应用程序都离不开它。.Net Framework时代我们使用App.config、Web.config&#xff0c;到了.Net Core的时代我们使用appsettings.json&#xff0c;这些我们再熟悉不过了。然而到了容器化、微服务的时代&#xff0c;这些本地文件配置有的时候就不太合适…

[Redis6]Bitmaps与set对比

Bitmaps与set对比 但Bitmaps并不是万金油&#xff0c; 假如该网站每天的独立访问用户很少&#xff0c; 例如只有10万&#xff08;大量的僵尸用户&#xff09; &#xff0c; 那么两者的对比如下表所示&#xff0c; 很显然&#xff0c; 这时候使用Bitmaps就不太合适了&#xff0c…

MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗

数据库自增ID机制原理介绍在分布式里面&#xff0c;数据库的自增ID机制的主要原理是&#xff1a;数据库自增ID和mysql数据库的replace_into()函数实现的。这里的replace数据库自增ID和mysql数据库的replace_into()函数实现的。这里的replace into跟insert功能类似&#xff0c;不…

7-15 QQ帐户的申请与登陆 (25 分)(map做法+思路分析)

一&#xff1a;题目 实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是&#xff1a;据说现在的QQ号码已经有10位数了。 输入格式: 输入首先给出一个正整数N&#xff08;≤10 ​5 ​​ &#xff09;&#xff0c;随后给出N行指令。每行指令的格式为&#xff1a;“命令符&a…

[Redis6]新数据类型_HyperLogLog

HyperLogLog 简介 在工作当中&#xff0c;我们经常会遇到与统计相关的功能需求&#xff0c;比如统计网站PV&#xff08;PageView页面访问量&#xff09;,可以使用Redis的incr、incrby轻松实现。 但像UV&#xff08;UniqueVisitor&#xff0c;独立访客&#xff09;、独立IP数…