STL之map【有序哈希表】使用方法

这里写目录标题

  • map【有序哈希表】使用方法
      • 1.头文件:
      • 2.创建map:
      • 3.添加键值对:
      • 4.查找键值对:
      • 5.遍历键-值对:
      • 5.综合示例:班级学生

map【有序哈希表】使用方法

话不多说,接着讲map用法:

map:映射,存储键-值对,并按键升序排序。

1.头文件:

#include <iostream>
#include <map>

2.创建map:

map<string, int> myMap; // 创建一个从字符串到整数的映射

3.添加键值对:

insert(pair<Key, Value>(key, value)):向映射中插入键-值对

   //使用make_pair将参数变成键值对类型myMap.insert(make_pair("c1",v1) );myMap.insert(make_pair("c2", v2));myMap.insert(make_pair("c3", v3));//或者直接使用花括号myMap.insert({"c4",v4});

4.查找键值对:

  • find(key):查找映射中是否存在特定键,返回迭代器。
  • count(key):统计特定键在映射中的出现次数(对于 std::map,要么是0,要么是1)。
    // 5.查找键值对int times = myMap.count("c2");if (times == 1) {cout << "存在班级c2" << endl;} else {cout << "不存在班级c2" << endl;}//找出班级c3的所有学生map<string, vector<string>>::iterator it;it = myMap.find("c3");if(it != myMap.end()) {cout << "班级c2的学生: ";for (string stu : it->second) {cout << stu << " ";}}

5.遍历键-值对:

  • 使用迭代器可以遍历整个映射
void printMap1(map<string, vector<string>>& myMap) {map<string, vector<string>>::iterator it;for (it = myMap.begin(); it != myMap.end();it++) {cout << "班级: " << it->first << " 学生:";for (const string& stuName : it->second){cout << stuName << ", ";}cout << endl;}
}

5.综合示例:班级学生

#include <iostream>
#include <set>
#include <string>
#include <map>
#include <vector>
using namespace std;//输出每个班级的人
void printMap(map<string, vector<string>>&  myMap) {for (const auto& pair : myMap) {cout << "班级: " << pair.first << " 学生:";for (const auto& stuName : pair.second){cout << stuName << ", ";}cout << endl;}}void printMap1(map<string, vector<string>>& myMap) {map<string, vector<string>>::iterator it;for (it = myMap.begin(); it != myMap.end();it++) {cout << "班级: " << it->first << " 学生:";for (const string& stuName : it->second){cout << stuName << ", ";}cout << endl;}}int main() {// 使用map存储班级-学生信息,班级是key,学生信息是value,一个字符串数组// 1.创建mapmap<string, vector<string>>  myMap;// 2.准备数据vector<string> v1 = {"张三","李四","王五"};vector<string> v2 = {"李寻欢","二郎神","游所为"};vector<string> v3 = {"郭靖","杨过","黄蓉"};vector<string> v4 = {"jack","Tom","Lina"};// 3.给map添加元素的两种办法: //在 map 中,键值对的插入语法应该使用 make_pair 或者花括号 {}myMap.insert(make_pair("c1",v1) );myMap.insert(make_pair("c2", v2));myMap.insert(make_pair("c3", v3));myMap.insert({"c4",v4});//输出每个班级的人printMap(myMap);// 4.删除指定键值对myMap.erase("c4");printMap1(myMap);// 5.查找键值对int times = myMap.count("c2");if (times == 1) {cout << "存在班级c2" << endl;} else {cout << "不存在班级c2" << endl;}//找出班级c3的所有学生map<string, vector<string>>::iterator it;it = myMap.find("c3");if(it != myMap.end()) {cout << "班级c2的学生: ";for (string stu : it->second) {cout << stu << " ";}}return 0;
}

image

综合示例2:统计单词频率

#include <iostream>
#include <map>
#include <string>
#include <sstream>
using namespace std;/*
@description: 本文件介绍有序map容器用法02
@author zhengshihong
*/int main() {string text = "this is a simple example of using std map this is example";map<string, int> wordFrequency;// 将文本拆分为单词并统计频率// istringstream 是 C++ 中的输入流,它可以从字符串中读取数据,就像 cin 从标准输入中读取数据一样。istringstream iss(text);//创建了一个 istringstream 对象 iss,并用给定的文本 text 来初始化它string word;//定义了一个字符串变量 word,用于存储从 iss 读取的每个单词。//它不断从 iss 中读取单词,并将每个单词存储在 word 变量中while (iss >> word) {// 将单词插入映射,如果已存在则增加频率wordFrequency[word]++;//使用 word 作为键,将单词插入到名为 wordFrequency 的映射(map 或 unordered_map)中。//如果已存在key等于单词,则频率加1,不存在则增加等于单词的key,并初始化频率为1}// 输出每个单词的频率for (const auto& pair : wordFrequency) {cout << pair.first << ": " << pair.second << endl;}return 0;
}

image

那么map的用法就讲到这里,下一章看vector的用法。

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

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

相关文章

spyder 对 lambda 函数的调试

如何进入lambda匿名函数进行调试&#xff1a; import pandas as pddef func(a, b):return a bseries pd.Series([1,2,3,4]) a series.apply(lambda x: func(x, 2)) print(a) 在调用匿名函数的地方打上断点&#xff0c;也就是这一行&#xff1a; a series.apply(lambda x…

总结Symbol、Set、WeakSet、Map、WeakMap

前言 这几个es6新增的数据结构和变量类型&#xff0c;不经常用&#xff0c;好容易忘记啊。在此记录一下&#xff0c;方便复习。 Symbol Symbol是es6新增的基本数据类型&#xff0c;用于生成独一无二的值。 基本使用 1、创建两个描述相同的值&#xff0c;也不会相等。 let s1 …

R303 指纹识别模块功能实现流程

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

基于jQuery与Spring MVC实现用户密码异步修改的实战演示

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;创建表单1、表单界面2、表单代码3、脚本代码 &#xff08;二&#xff09;后端控制器&#xff08;三&#xff09;测试代码&#xff0c;查看效果1、弹出更改密码表单2、演示更改密码操作 三、实战总结 一、实战概述 …

【MySQL】最左匹配原则

最左匹配原则 0x1 简单说下什么是最左匹配原则 顾名思义&#xff1a;最左优先&#xff0c;以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like&#xff09;就会停止匹配。 例如&#xff1a;b 2 如果建立(a&#xff0c;b&#xff09;顺序…

苏州渭塘镇应用无人机“智慧执法”

苏州渭塘镇应用无人机“智慧执法” 在今年以来&#xff0c;渭塘镇综合行政执法局采用了“空中地面”的立体监督模式&#xff0c;以实现对“互联网执法”工作的深入推进。在这一模式下&#xff0c;无人机巡查作为技术手段得到广泛应用&#xff0c;而安全生产监管信息系统和综合…

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法&#xff0c;用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中&#xff0c;首先将两个文本分别进行处理&#xff0c;然后…

设计模式学习总结

责任链模式 使用方法&#xff1a; 1.创建接口 2.定义实现类&#xff0c;每个实现类实现接口&#xff0c;并拥有一个ArchiveHandle的成员&#xff0c;用作责任链的链接 public interface ArchiveHandle {void handle(ArchiveVO archiveVO); } public class ArchivePreHandle i…

企业使用CRM系统有哪些好处?使用CRM应该注意什么?

近年来&#xff0c;企业竞争日趋激烈&#xff0c;为推动企业业绩增长&#xff0c;赢得市场的一席之地&#xff0c;CRM成为企业争相布局的管理工具。那么CRM是什么&#xff0c;到底有什么魔力能让企业管理者着迷&#xff0c;本文我们将为大家进行深入剖析。 什么是CRM&#xff…

龙芯3A6000_通过xrdp远程访问统信UOS

原文链接&#xff1a;龙芯3A6000|通过xrdp远程访问统信UOS hello&#xff0c;大家好&#xff01;今天我带给大家的是一篇实用性极强的技术文章——通过xrdp远程访问装载在龙芯3A6000上的统信UOS操作系统。这意味着&#xff0c;无论您使用的是Windows、MACOS还是Linux操作系统&a…

[视频处理]关于视频处理的多画面样式

在开发视频系统时&#xff0c;经常会遇到多画面的需求&#xff0c;这里收集一些多画面的素材&#xff0c;共大家参考。 图片来源于网络&#xff0c;仅供参考。 后续补充文章 【图像处理】使用FPGA实现视频多画面的方案 多画面样式

NLP深入学习(七):词向量

文章目录 0. 引言1. 什么是词向量2. Word2Vec2.1 介绍2.2 例子 3. 参考 0. 引言 前情提要&#xff1a; 《NLP深入学习&#xff08;一&#xff09;&#xff1a;jieba 工具包介绍》 《NLP深入学习&#xff08;二&#xff09;&#xff1a;nltk 工具包介绍》 《NLP深入学习&#x…

常见域控开放端口及其作用

TCP/UDP 53&#xff08;域名系统&#xff0c;DNS&#xff09;&#xff1a;域控制器使用DNS端口来提供域名解析服务&#xff0c;将域名映射到IP地址&#xff0c;以便客户端能够找到域控制器。 TCP/UDP 88&#xff08;Kerberos&#xff09;&#xff1a;Kerberos是Windows中用于身…

【博士每天一篇论文-综述】Deep Echo State Network (DeepESN)_ A Brief Survey

阅读时间&#xff1a;2023-11-22 1 介绍 年份&#xff1a;2017 作者&#xff1a;C. Gallicchio 比萨大学计算机科学系终身教授助理教授&#xff0c;A. Micheli&#xff0c;比萨大学计算机科学系 期刊&#xff1a; ArXiv 引用量&#xff1a;68 这是两个大牛的论文&#xff0c;…

Nginx 平滑升级原理分析和实验

Nginx平滑升级 1. 为什么要对 Nginx 平滑升级2. 平滑升级的原理3. Nginx 信号简介3.1. master 主进程支持的信号3.2. worker 工作进程支持的信号 4. Nginx 平滑升级实战5. 平滑升级总结6. 升级实验6.1. 部署一台新的 Nginx 服务器6.2. 查看版本和模块6.3. 访问验证6.4. 升级 Ng…

autosar学习笔记 之SecOC

SecOC 接下来SecOC标准就更复杂一点,它不单单是做了通讯校验。 SecOC是基于对称密钥加密的一套机制,需要对ECU间的通讯作身份认证处理,来更好的防止伪装攻击,谈起对称或非对称加密,就会涉及到密钥的存储和Mac值的计算。 因此SECOC机制对于密钥的硬件存储,也有一定的要求…

matlab appdesigner系列-常用15-滑块、微调器

滑块&#xff0c;以左右拖动的方式在一定范围内改变数值 此示例&#xff0c;滑块显示微调器的数值&#xff0c;微调器也可以显示滑块的数值 操作步骤为&#xff1a; 1&#xff09;将滑块和微调器拖拽到画布上 2&#xff09;分别设置这两个组件的回调函数 回调函数有两个选项…

c语言-常见的动态内存错误

文章目录 前言一、常见的动态内存错误1.1 对空指针进行解引用操作1.2 对动态开辟的空间进行越界访问1.3 对非动态开辟的空间使用free()1.4 使用free()释放一块动态开辟的空间时&#xff0c;释放不完全1.5 对同一块动态开辟的空间进行多次释放1.6 动态开辟的空间使用后&#xff…

Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix)

CRM系统环境搭建部署&#xff08;nginx、jdk、tomcat、keepalived、mysql、zabbix&#xff09; crm.XXX.com #CRM系统使用的域名&#xff0c;已注册并做好DNS解析 两台应用服务器&#xff08;主、备&#xff09;&#xff1a;172.16.38.172、172.16.38.173 两台数据库服务器…