STL-----map的常见使用

news2024/9/29 1:31:31

1,MAP的说明

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

map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。

对于迭代器来说,可以修改实值,而不能修改key。

2、map的功能

自动建立Key - value的对应。key 和 value可以是任意你需要的类型。

注意: key不可以修改但是value的值可以修改复杂度基本是Log(N),

根据Key 修改value,但是不可以改变key的值

3,map的定义

可以想定义变量一样定义map

map<key,value>变量名

这里的key和value可以使下列的任意组合 int char struct string

map<int,char> name;
map<char,int> name;
map<int,int> name;
map<string,char> name;
map<string,int> name;

简单的使用:

#include <map>  //这个是头文件不能少的
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    map<string, int>name1;
    name1["hhh"] = 1002;
    cout << "key是a的value是" << name['a'] << endl;
    cout << "key是hhh的value是" << name1["hhh"] << endl;
    return 0;
}
key是a的value是1001
key是hhh的value是1002

4,常见的用法

insert()

插入元素

size()

计算元素的个数

empty()

判断是否为空

find()

查找一个元素

erase()

删除元素

clear()

清空元素

5举例说明

5.1输入数据

1-最原始的添加元素,

#include <map>
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    name['b'] = 1002;
    name['c'] = 1003;
    name['d'] = 1004;

    cout << "key是a的value是" << name['a'] << endl;
    cout << "key是a的value是" << name['b'] << endl;
    cout << "key是a的value是" << name['c'] << endl;
    
    return 0;
}
输出:
key是a的value是1001
key是a的value是1002
key是a的value是1003

2-那么还可以插入一个元素

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    name['b'] = 1002;

    name.insert(pair<char, int>('t', 1222)); //这里是使用的是插入

    cout << "key是a的value是" << name['a'] << endl;
    cout << "key是a的value是" << name['b'] << endl;
    cout << "key是a的value是" << name['t'] << endl;
    
    return 0;
}

输出为:

key是a的value是1001
key是a的value是1002
key是a的value是1222

3-加一个循环条件来控制无限的来添加到map之中

#include <map>
#include<iostream>
using namespace std;
int main()
{
    string name;
    int telp=1;
    map<string, int> xx;
    while (telp != 0) {
        cin >> name >> telp;
        xx[name] = telp;
    }
    cout << "输出:" << endl;
    for (map<string, int>::iterator it = xx.begin(); it != xx.end(); it++) {
        cout << it->first << " " << it->second << endl;
    }
    return 0;
}

输出为:

张三 1523333
李四 2121212
汪汪 32323232
大角度看 0
输出:
大角度看 0
李四 2121212
汪汪 32323232
张三 1523333

5.2size的使用

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    name['b'] = 1002;
    name['c'] = 1003;
    name['d'] = 1004;
    cout <<"长度是:"<< name.size() << endl;

    return 0;
}

输出:

长度是:4

5.3删除的使用

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    name['b'] = 1002;
    name['c'] = 1003;
    name['d'] = 1004;
    cout << "size = " << name.size() << endl;
    //1. 使用 key 删除
    name.erase('a');  // 删除 key = 123456 的节点
    cout << "size = " << name.size() << endl;
    //2. 使用迭代器删除
    map<char, int>::iterator iter = name.find('b');
    name.erase(iter);
    cout << "size = " << name.size() << endl;
    //3. 清空整个容器
    name.clear();
    cout << "size = " << name.size() << endl;
    return 0;
}

输出:

size = 4
size = 3
size = 2
size = 0

5.4来进行数据的修改, 我们知道了那个key的值不可以动,但是value的值可以修改,就是可以重新赋值,然后将其覆盖掉,举例

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<char, int> name;
    name['a'] = 1001;
    cout << "key是a的value的初始值是" << name['a'] << endl;
    name['a'] = 2222;
    cout << "覆盖新值是" << name['a'] << endl;
    name['a'] = 3333;
    cout << "覆盖新值是" << name['a'] << endl;
    name['a'] = 4444;
    cout << "覆盖新值是" << name['a'] << endl; 

    return 0;
}

输出:

key是a的value的初始值是1001
覆盖新值是2222
覆盖新值是3333
覆盖新值是4444

5.5 find 的使用

#include<map>   // map
#include<iostream>
using namespace std;
int main()
{
    map<char, int>maps;
    maps['d'] = 10;
    maps['e'] = 20;
    maps['a'] = 30;
    maps['b'] = 40;
    maps['c'] = 50;
    maps['r'] = 60;
    cout << "删除前:" << endl;
  //使用迭代来将数据都输出
    for (map<char, int>::iterator it = maps.begin(); it != maps.end(); it++)
    {
        cout << it->first << " " << it->second << endl;
    }

    //输出查找的值
   map<char,int>::iterator its = maps.find('c');
   cout << its->second;
   
    return 0;
}

输出:

删除前:
a 30
b 40
c 50
d 10
e 20
r 60
50

在迭代的输出过程中想要输出key和value则使用迭代,然后指针输出分别指向first,second来进行输出

find和erase的共同使用

定向删除,先去找,然后再去删除

#include<map>   // map
#include<iostream>
using namespace std;
int main()
{
    char t;
    map<char, int>maps;
    maps['d'] = 10;
    maps['e'] = 20;
    maps['a'] = 30;
    maps['b'] = 40;
    maps['c'] = 50;
    maps['r'] = 60;
    cout << "你想删除的是:"; cin >> t;
    cout << "删除前:" << endl;
    for (map<char, int>::iterator it = maps.begin(); it != maps.end(); it++)
    {
        cout << it->first << " " << it->second << endl;
    }

    maps.erase(maps.find(t));

    cout << "删除后:" << endl;
    for (map<char, int>::iterator it = maps.begin(); it != maps.end(); it++)
    {
        cout << it->first << " " << it->second << endl;
    }

    return 0;
}

输出:

你想删除的是:d
删除前:
a 30
b 40
c 50
d 10
e 20
r 60
删除后:
a 30
b 40
c 50
e 20
r 60

引用文本

若有问题请指出,共同

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

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

相关文章

3.1.8 多态

文章目录1.概念2.特点3.入门案例练习4 多态的好处5 多态的使用6 练习&#xff1a;多态成员使用测试7 拓展7.1 综合案例7.2 多态为了统一调用标准7.3 静态变量和实例变量的区别7.4 向上转型和向下转型1.概念 多态是面向对象程序设计&#xff08;OOP&#xff09;的一个重要特征&…

【数据结构初阶】第三篇——单链表

链表的概念及其结构 初始化链表 打印单链表 增加结点 头插 尾插 在给定位置之前插入 在给定位置之后插入 删除结点 头删 尾删 删除给定位置的结点 查找数据 修改数据 链表的概念及其结构 基本概念 链表是一种物理存储结构上非连续&#xff0c;非顺序的存储结构&a…

盘点保护隐私安全的浏览器,密码锁屏这个功能,真香

在互联网时代&#xff0c;大家都比较关心自己的隐私安全。一些互联网公司和在线客服会跟踪用户的在线活动&#xff0c;收集用户的个人信息&#xff0c;有时候甚至因为个人的不良习惯导致信息泄露&#xff0c;因此选择隐私和安全性好的浏览器尤其重要。下面给大家介绍隐私安全做…

大数据技术架构(组件)11——Hive:日期函数

1.4.5、日期函数1.4.5.1、from_unixtimeselect from_unixtime(1638602968),from_unixtime(1638602968,yyyy-MM-dd HH:mm:SS),from_unixtime(1638602968,yyyy-MM-dd);1.4.5.2、unix_timestampselect unix_timestamp();1.4.5.3、to_dateselect to_date(2021-12-04 2021-12-04 15:…

【授权与认证】OAuth 2.0 和 OIDC 的异同点

开发者谈 | OAuth 2.0 和 OIDC 协议的关系&#xff1f;&#xff08;内含必看案例&#xff09; 【Web 安全】CSRF 攻击详解 OAuth 2.0 OAuth 2.0 的一个简单解释OAuth 2.0 的四种方式什么是Oauth2.0&#xff0c;Oauth2.0的四种授权模式 简单说&#xff0c;OAuth 就是一种授权…

【前端】Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据、抽取到hook

文章目录目标过程与代码监听窗口的滚动窗口上事件监听的移除封装到一个hook回调函数法&#xff08;不推荐&#xff09;返回值法&#xff08;推荐&#xff09;效果总代码修改或添加的文件hooks的useScrollhome-content参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a…

git 使用tag

文章目录概述示例创建标签 tag查看tag删除本地标签推送标签git 根据tag创建分支回退到tag参考概述 常常为发布上线某个版本打上一个标签&#xff0c;表示这是什么版本&#xff0c;这样后续找起来就很方便。 如果没有标签只能通过commit历史去查找&#xff0c;而且commit版本显…

每日学术速递1.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 更多Ai资讯&#xff1a; 今天带来的arXiv上最新发表的3篇文本图像的生成论文。 Subjects: cs.LG、cs.Cv、cs.AI、cs.CL 1.StyleGAN-T: Unlocking the Power of GANs for Fast Large-Scale Text-to-Im…

Spire.Doc for Java v11.1.1 Patch

Spire.Doc for Java是一个专业的 Word API&#xff0c;它使 Java 应用程序能够在不依赖 Microsoft Word 的情况下创建、转换、操作和打印 Word文档。 通过使用这个多功能库&#xff0c;开发人员能够毫不费力地处理大量任务&#xff0c;例如插入图像、超链接、 数字签名、书签和…

Mybatis-plus(下)

一&#xff0c;乐观锁可参考官方文档&#xff1a;https://baomidou.com/pages/0d93c0/场景&#xff1a;当两个工作人员同时去处理一条投诉工单的时候当两个人一起点开了投诉工单详情 并一起编辑处理 随后同时反馈给用户时 此时就会出现矛盾 当系统正常 没有bug的时候 是会出现两…

SpringCloud_Sleuth分布式链路请求跟踪

目录一、概述1.为什么会出现这个技术&#xff1f;需要解决哪些问题&#xff1f;2.是什么3.解决二、搭建链路监控步骤1.zipkin2.服务提供者3.服务消费者&#xff08;调用方&#xff09;4.依次启动eureka7001/8001/805.打开浏览器访问&#xff1a; http://localhost:9411一、概述…

网络流量监控对DMS系统排错分析案例

背景 DMS系统是某汽车集团的经销商在线系统&#xff0c;是汽车集团的重要业务系统。本次分析重点针对DMS系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析。 该汽车总部已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和…

Qt扫盲-QDebug理论总结

QDebug理论使用总结一、概述二、使用1. 基础使用2. 格式化选项3.将自定义类型写入流一、概述 每当开发人员需要将调试或跟踪信息写入设备、文件、字符串或控制台时&#xff0c;都会使用QDebug。这个就可以方便我们调试&#xff0c;基本上Qt所有的内容都能通过调试打印出来&…

14.重载运算与类型转换

文章目录重载运算与类型转换14.1基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义赋值和复合赋值运算符选择作为成员或者非成员14.2输入和输出运算符14.2.1重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员…

智能家居之主机---计划筹备

智能家居之主机---计划筹备前言绪言前期构思硬件平台结构平台前言 绪言 感觉有一年多没发过文章了&#xff0c;这一年多太忙了&#xff0c;来到新的公司后要学的太多了&#xff0c;代码风格&#xff0c;架构&#xff0c;操作系统&#xff0c;各种通讯协议&#xff0c;伺服驱动…

解决问题的方法论

概述 解决问题的能力是职场中最重要的能力之一&#xff0c;如何逻辑清晰、效率满满的解决问题&#xff0c;可参考以下4个步骤。 一、准确的界定问题 找出真正的问题。 准确的界定问题&#xff0c;避免被表面现象所迷惑。 《麦肯锡工具》中&#xff0c;给出一个标准的步骤&am…

【数据手册】LM1117L3芯片的使用

1.特征 可调或固定输出1A输出电流低损耗&#xff0c;在1A输出电流时最大电压为1.3V0.04%的线路调节0.2%负载调节100%热极限燃烧快速瞬态响应 2.描述 LM1117系列正可调和固定调节器设计提供1A高电流效率。所有内部电路设计为低至1.3V输入输出差。片内微调将参考电压调整为1% 3…

【微服务】RabbitMQSpringAMQP消息队列

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.初识MQ (1) 引入 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;可以立即得到响应&#xff0c;但是你却不能跟多个人同时通话。 异…

leedcode刷题 | 详细注释 | 调用+调试 C++

目录1.两数之和题目C代码2.两数相加题目代码3. 无重复字符的最长子串题目&#xff1a;代码&#xff1a;4. 合并两个有序数组题目&#xff1a;代码&#xff1a;5.寻找两个正序数组的中位数题目&#xff1a;代码&#xff1a;1.两数之和 题目 给定一个整数数组 nums 和一个整数目…

API 网关策略的二三事

作者暴渊&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer。 近些年随着云原生和微服务架构的日趋发展&#xff0c;API 网关以流量入口的角色在技术架构中扮演着越来越重要的作用。API 网关主要负责接收所有请求的流量并进行处理转发至上游服务&#xff0c;…