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

news2024/11/26 2:30:15

这里写目录标题

  • 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.创建map
    map<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.coloradmin.cn/o/1405336.html

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

相关文章

数组A[m+n]中存放了两个线性表(a1,a2,.....am)和(b1,b2.....bn),将数组中的两个线性表的位置互换,要求空间复杂度为1

要求空间复杂度为O(1)&#xff0c;那么不可以借助辅助数组来完成此操作 算法思路&#xff1a;可先将此数组逆置变成bn,......b1,am,....,a1&#xff0c;然后分别逆转两个线性表的数据元素 算法实现 1、定义一个函数&#xff0c;该函数的功能是可以对一个数组的任意连续的部分进…

网络安全要学些什么?(超详细)

前言 我发现虽然网上已经有非常多的学习路线了&#xff0c;但是仍然有很多零基础的小白还是不懂网络安全到底应该要怎么去学习&#xff0c;我也经常会在后台收到这样的问题“我想学网络安全&#xff0c;需要先学编程语言吗&#xff1f;”、“学渗透就业会不会很难&#xff1f;…

为什么静态IP是您批量创建社交媒体和账户管理必备?

“新设备登录请求被拒绝&#xff0c;请使用常用设备登录。”谁没有遇到过远程管理社交或商业账户时登录被拒的情况呢? 更糟糕的情况可能是遇到这样的提示&#xff1a;“您的账号可能被盗用&#xff0c;暂时限制使用。请按要求进行身份验证。” 最坏的结果则可能是因为各种原…

Java基础 - 09 Set之linkedHashSet , CopyOnWriteArraySet

LinkedHashSet和CopyOnWriteArraySet都是Java集合框架提供的特殊集合类&#xff0c;他们在特定场景下有不同的用途和特点。 LinkedHashSet是Java集合框架中的一种实现类&#xff0c;它继承自HashSet并且保持插入顺序。它使用哈希表来存储元素&#xff0c;并使用链表来维护插入…

RC滤波电路的原理

RC滤波电路分为低通滤波和高通滤波 低通滤波通过低频信号 看上面这两个电路 先分析低通滤波 由于电容C具有隔直通交的特性&#xff0c;所以输入的高频分量相当于经过电阻R后直接对地短接&#xff0c;并没有输出到后端负载上&#xff0c;只有低频的输入分量才会输出到后端。 电…

022-安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

022-安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用 #知识点&#xff1a; 1、PHP留言板前后端功能实现 2、数据库创建&架构&增删改查 3、内置超全局变量&HTML&JS混编 4、第三方应用插件&传参&对象调用 演示案例&a…

开源的测试平台快2千星了,能带来多少收益呢

最近看了下自己去年初开源的测试平台&#xff0c;star一起算的话也到1.7k了&#xff1a; 做开源的初心一方面是想把自己的理解和思想展示出来&#xff0c;另一方面是想进一步打造个人IP&#xff0c;提升影响力&#xff08;其实这个想法很早之前就有了&#xff0c;计划过无数次但…

威士忌品鉴色泽与味蕾:从颜色到味蕾,解读品质与特点

威士忌的色泽与味蕾是其品质和特点的重要体现。通过对威士忌颜色的观察&#xff0c;我们可以大致判断其酿造原料、陈酿时间以及酒龄等信息。而品尝威士忌的过程&#xff0c;则是对其色泽、香气和味蕾的综合体验。本文将结合雷盛537威士忌深入探讨威士忌的色泽与味蕾之间的关系&…

《WebKit 技术内幕》学习之九(2): JavaScript引擎

2 V8引擎 2.1 基础 V8是一个开源项目&#xff0c;也是一个JavaScript引擎的实现。它最开始是由一些语言方面的专家设计出来的&#xff0c;后被Google收购&#xff0c;成为了JavaScript引擎和众多相关技术的引领者。其目的很简单&#xff0c;就是为了提高性能。因为在当时之前…

houdini fft 使用三层for each结构 以及for 问题

for each 中 使用 attrib wrangle detail时&#xff0c;不连接foreach_count1&#xff0c;只运行一次 for each 问题 merge eachiteration 对结构进行合并 transform 位置的移动针对的是原位置对原点的距离&#xff0c;而非移动后置0后再移

Unity编程#region..#endregion以及面板提示语标签[Tooltip(““)]

C#中的#region..#endregion 在Unity中&#xff0c;#region和#endregion是用于代码折叠的预处理指令。它们并不是Unity特有的&#xff0c;而是C#语言本身提供的功能。 #region用于标记一段代码的开始&#xff0c;而#endregion用于标记一段代码的结束。在编辑器中&#xff0c;可…

C++:迭代器失效问题

目录 1.vector迭代器失效问题 1.底层空间改变 ​编辑 2.指定位置元素的删除操作 2.Linux下的迭代器失效检测 1.扩容 2.删除 3.解决方法 1.vector迭代器失效问题 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是…

计组与原理:系统总线

大家好啊&#xff0c;这里来到计组第二部分内容&#xff1a;系统总线 跳转上一篇&#xff1a;计组原理&#xff1a;系统概论与基本组成 系统总线 1.总线的基本概念单总线结构框图面向 CPU 的双总线结构框图以存储器为中心的双总线结构框图 2.总线的分类片内总线系统总线通信总线…

牛仔服装行业研究:预计到2025年将达到约650亿美元

牛仔服装是指原美国西部垦拓者(牛仔)穿着的服装&#xff0c;一般用纯棉或棉纤维为主要原材料混纺、交织的色织牛仔布制作。 牛仔布的生产起源于美国。牛仔服装历经百年变迁&#xff0c;由最初的工装演变为时装&#xff0c;征服了人们不同阶段挑剔的目光&#xff0c;最终成为服装…

UDP和TCP代理协议有什么区别?哪个更好

在互联网的世界里&#xff0c;数据传输的方式有很多种&#xff0c;其中 UDP 和 TCP 是两种常见的传输协议。而代理协议则是为了在网络中传输数据时提供安全、稳定和高效的传输环境。那么&#xff0c;UDP 和 TCP 代理协议有什么区别呢&#xff1f;哪个更好呢&#xff1f;接下来&…

自然语言处理的崛起:从初步分析到深度理解

自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能和语言学的交叉领域&#xff0c;旨在让计算机能够理解和生成人类语言。随着时间的推移&#xff0c;NLP 经历了一系列革命性的变化&#xff0c;从简单的规则和模式匹配到如今的深度学习模型&#xff0c;它们使计算…

什么是BMC

BMC全称为Baseboard Management Controller&#xff08;基板管理控制器&#xff09;&#xff0c;是一种独立于服务器操作系统和主处理器的专用微控制器&#xff0c;它内置在服务器、网络设备和其他复杂电子系统的主板上。BMC主要负责监控和管理系统硬件的状态&#xff0c;并提供…

ubuntu上创建ftp服务器

今天在linux电脑上安装了ftp服务器&#xff0c;中间碰到不少问题&#xff0c;参照各路攻略&#xff0c;修改多次配置后终于完成了服务器搭建 1&#xff1a;安装vsftp服务器 最简答的一步&#xff0c;直接&#xff1a;apt-get install vsftp 安装完成后&#xff0c;查看版本号…

华为发布 HarmonyOS NEXT 鸿蒙星河版

文章目录 个人简介 在 2024-01-18 下午于深圳举办的鸿蒙生态千帆启航仪式上&#xff0c;华为常务董事兼终端BG CEO余承东宣布了HarmonyOS NEXT&#xff08;鸿蒙星河版&#xff09;的开发者预览版面向开发者开放申请。这一版本旨在实现六大极致原生体验&#xff0c;包括原生精致…

C++——IOStream

什么是IO&#xff1f; C语言和C&#xff0c;我们其实已经接触到了两个IO的概念 #include<stdio.h> #include<iostream> iostream&#xff0c;便是IO流&#xff0c;其中I表示in&#xff0c;O表示out&#xff0c;代表着用户的输入和终端的输出。在之前的C语法中&a…