C++ Map常见用法说明

2023-05-16

      • 一 声明
      • 二 插入操作
        • 1 使用 进行单个插入
        • 1 使用insert进行单个和多个插入
      • 三 取值
      • 四 容量查询
      • 五 迭代器
      • 六 删除交换
        • 1 删除
        • 2 交换
      • 七 顺序比较
      • 八 查找
      • 九 操作符

C++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。

http://www.studytonight.com/cpp/images/map-example.png

——————————————————————————————————————————————

一. 声明

//头文件
#include<map>

map<int, string> ID_Name;

// 使用{}赋值是从c++11开始的,因此编译器版本过低时会报错,如visual studio 2012
map<int, string> ID_Name = {
                { 2015, "Jim" },
                { 2016, "Tom" },
                { 2017, "Bob" } };

——————————————————————————————————————————————

二. 插入操作

2.1 使用[ ]进行单个插入

map<int, string> ID_Name;

// 如果已经存在键值2015,则会作赋值修改操作,如果没有则插入
ID_Name[2015] = "Tom";

2.1 使用insert进行单个和多个插入

insert共有4个重载函数:

// 插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败
pair<iterator,bool> insert (const value_type& val);

//在指定位置插入,在不同位置插入效率是不一样的,因为涉及到重排
iterator insert (const_iterator position, const value_type& val);

// 插入多个
void insert (InputIterator first, InputIterator last);

//c++11开始支持,使用列表插入多个   
void insert (initializer_list<value_type> il);

下面是具体使用示例:

#include <iostream>
#include <map>

int main()
{
    std::map<char, int> mymap;

    // 插入单个值
    mymap.insert(std::pair<char, int>('a', 100));
    mymap.insert(std::pair<char, int>('z', 200));

    //返回插入位置以及是否插入成功
    std::pair<std::map<char, int>::iterator, bool> ret;
    ret = mymap.insert(std::pair<char, int>('z', 500));
    if (ret.second == false) {
        std::cout << "element 'z' already existed";
        std::cout << " with a value of " << ret.first->second << '\n';
    }

    //指定位置插入
    std::map<char, int>::iterator it = mymap.begin();
    mymap.insert(it, std::pair<char, int>('b', 300));  //效率更高
    mymap.insert(it, std::pair<char, int>('c', 400));  //效率非最高

    //范围多值插入
    std::map<char, int> anothermap;
    anothermap.insert(mymap.begin(), mymap.find('c'));

    // 列表形式插入
    anothermap.insert({ { 'd', 100 }, {'e', 200} });

    return 0;
}

——————————————————————————————————————————————

三. 取值

Map中元素取值主要有at和[ ]两种操作,at会作下标检查,而[]不会。

map<int, string> ID_Name;

//ID_Name中没有关键字2016,使用[]取值会导致插入
//因此,下面语句不会报错,但打印结果为空
cout<<ID_Name[2016].c_str()<<endl;

//使用at会进行关键字检查,因此下面语句会报错
ID_Name.at(2016) = "Bob";

——————————————————————————————————————————————

四. 容量查询

// 查询map是否为空
bool empty();

// 查询map中键值对的数量
size_t size();

// 查询map所能包含的最大键值对数量,和系统和应用库有关。
// 此外,这并不意味着用户一定可以存这么多,很可能还没达到就已经开辟内存失败了
size_t max_size();

// 查询关键字为key的元素的个数,在map里结果非0即1
size_t count( const Key& key ) const; //

——————————————————————————————————————————————

五. 迭代器

共有八个获取迭代器的函数:* begin, end, rbegin,rend* 以及对应的 * cbegin, cend, crbegin,crend*

二者的区别在于,后者一定返回 const_iterator,而前者则根据map的类型返回iterator 或者 const_iterator。const情况下,不允许对值进行修改。如下面代码所示:

map<int,int>::iterator it;
map<int,int> mmap;
const map<int,int> const_mmap;

it = mmap.begin(); //iterator
mmap.cbegin(); //const_iterator

const_mmap.begin(); //const_iterator
const_mmap.cbegin(); //const_iterator

返回的迭代器可以进行加减操作,此外,如果map为空,则 begin = end。

这里写图片描述

——————————————————————————————————————————————

六. 删除交换

6.1 删除


// 删除迭代器指向位置的键值对,并返回一个指向下一元素的迭代器
iterator erase( iterator pos )

// 删除一定范围内的元素,并返回一个指向下一元素的迭代器
iterator erase( const_iterator first, const_iterator last );

// 根据Key来进行删除, 返回删除的元素数量,在map里结果非0即1
size_t erase( const key_type& key );

// 清空map,清空后的size为0
void clear();

6.2 交换

// 就是两个map的内容互换
void swap( map& other );

——————————————————————————————————————————————

七. 顺序比较

// 比较两个关键字在map中位置的先后
key_compare key_comp() const;

示例:

map<char,int> mymap;
map<char,int>::key_compare mycomp = mymap.key_comp();

mymap['a']=100;
mymap['b']=200;
mycomp('a', 'b');  // a排在b前面,因此返回结果为true

——————————————————————————————————————————————

八. 查找

// 关键字查询,找到则返回指向该关键字的迭代器,否则返回指向end的迭代器
// 根据map的类型,返回的迭代器为 iterator 或者 const_iterator
iterator find (const key_type& k);
const_iterator find (const key_type& k) const;

举例:

std::map<char,int> mymap;
std::map<char,int>::iterator it;

mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;

it = mymap.find('b');
if (it != mymap.end())
    mymap.erase (it); // b被成功删除

——————————————————————————————————————————————

九. 操作符

operator: == != < <= > >=
注意 对于==运算符, 只有键值对以及顺序完全相等才算成立。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ Map常见用法说明 的相关文章

  • EJB概述

    EJB含义为企业Java Beans EJB是J2EE平台的重要组成部分 开发者可以在J2EE平台使用基于组件的体系结构 xff0c 该结构目的为企业级应用程序提供多层 分布式和高度事务性等特性 EJB提供了一种开发和部署基于组件的企业应用
  • EJB - 环境设置

    一 本博客将根据tutorialspoint文档的指导进行EJB环境的设置 二 系统需求 EJB是Java的一个框架 xff0c 所以第一个要求是在您的机器上安装一个Java开发工具包 xff08 JDK xff09 JDK1 5 or a
  • EJB--应用创造上

    为了创建一个简单的EJB模块 xff0c 我们将使用NetBeans New project 向导 在下面给出的示例中 xff0c 我们将创建一个名为Component的EJB模块项目 一 创建项目 在NetBeans IDE中 xff0c
  • EJB-应用创造中

    一 构建项目 在项目资源管理器窗口中选择EjbComponent项目 右键单击它打开context菜单 选择clean and build 您将在NetBeans控制台输出中看到以下输出 ant f C EJB EjbComponent c
  • EJB--应用创造下

    创建客户端以访问EJB 一 创建客户端以访问EJB 在NetBeans IDE中 xff0c 选择File gt New Project gt 在 Java类别 下选择 项目类型 xff0c 将 项目类型 选为 Java应用程序 单击下一步
  • iptables 原来这么简单

    你在找一个完整的iptables教程吗 xff1f 在本文中 xff0c 我们将向您展示如何在linux系统上安装和使用iptables 通过了解这个Linux防火墙工具 xff0c 您可以使用命令行界面更好的保护Linux xff0c 免
  • zabbix 事件通知--邮件媒体配置

    一 概述 假设我们已经配置了一些项 xff08 items xff09 和触发器 triggers xff0c 并且现在由于一些事件而引起触发器的状态改变 xff0c 那么现在是时候考虑去做一些操作了 首先 xff0c 我们不想一直盯着触发
  • zabbix 事件通知--警告脚本配置

    一 概述 假设我们已经配置了一些项 xff08 items xff09 和触发器 triggers xff0c 并且现在由于一些事件而引起触发器的状态改变 xff0c 那么现在是时候考虑去做一些操作了 首先 xff0c 我们不想一直盯着触发
  • shell 脚本统计文件数

    下面这段代码展示了通过shell 脚本统计某个目录下的文件数 xff0c 并输出到文本文件中 bin sh declare x num1 61 0 read dir for file in 96 ls a 1 96 do echo 1 if
  • 文件传输命令(持续更新中)

    文件传输是非常常用的命令 xff0c 今天小编就带大家整理一下自己常用的一些文件传输命令 xff1a rsync 命令 rsync是可以实现增量备份的工具 配合任务计划 xff0c rsync能实现定时或间隔同步 xff0c 配合inoti
  • 滑模控制

    滑模控制 举例说明滑模控制 对于一个典型的二阶系统 x 1 61 x
  • wildfly软件介绍

    WildFly是什么 xff1f Wildfly是一个开源的基于JavaEE的轻量级应用服务器 xff0c 目前 xff0c 最新版本是Wildfly 15 xff0c wildfly遵循LGPL2 1许可 xff0c 意味着可以在任何商业
  • JDK介绍与安装

    xff08 一 xff09 JDK 简介 JDK Java SE Development kit JDK java开发工具包 JDK 全称Java SE Development kit JDK xff0c 即java 标准版 开发包 xff
  • 一个简单的java程序

    xff08 一 xff09 简单的java程序 public class MyFirstApp public static void main String args System out print 34 Hello world 34 x
  • Java 注释

    xff08 一 xff09 注释的重要性 编写程序的时候 xff0c 总需要为程序添加一些注释 xff0c 用以说明某段代码的作用 xff0c 或者说明某个类的用途 xff0c 某个方法的工能 xff0c 以及该方法的的参数和返回值的数据类
  • java 标识符,分隔符,关键字

    xff08 一 xff09 标识符的介绍 Java语言中 xff0c 对于变量 xff0c 常量 xff0c 函数 xff0c 语句块也有名字 xff0c 我们统统称之为Java标识符 标识符是用来给类 对象 方法 变量 接口和自定义数据类
  • Java基本数据类型

    这节博客将向大家讲解java的数据类型 xff0c 在讲解数据类型前 xff0c 先来看一下变量 xff08 一 xff09 变量 java语言是强类型语言 xff0c 强类型包含两方面的含义 1 xff1a 所有的变量必须先声明 xff0
  • 自动类型转换

    xff08 一 xff09 自动类型转换 在java 程序中 xff0c 不同的基本类型的值经常需要进行相互类型转换 xff0c 类型转换分为自动类型转换和强制类型转换 布尔类型boolean占有一个字节 xff0c 由于其本身所代码的特殊
  • Eclipse中设置Tomcat服务器

    01首先打开eclipse软件 xff0c 点击顶部的windows菜单 xff0c 选择下拉菜单中的preferences选项 xff0c 如下图所示 02在弹出的Preference界面中选择Server 找到左侧的Runtime En
  • games系列学习 -- Möller Trumbore 算法

    M ller Trumbore 算法 是三角形与射线 光线 之间判定是否相交的快速算法 利用了重心坐标来表示三角形 首先假设射线的方程 xff1a O为发射点 D为方向向量 再假设三角形平面方程 xff1a b1 b2 1 b1 b2 分别

随机推荐

  • 使用手机摄像头实现视频监控实时播放

    使用手机摄像头实现视频监控实时播放 一 概述 视频监控实时播放的原理与目前较为流行的直播是一致的 xff0c 所以采用直播的架构实现视频监控实时播放 xff0c 流程图如下 xff1a
  • 滑模观测器

    什么是滑模观测器 1 滑模观测器是一类动态系统 2 滑模观测器是指根据系统的外部变量 输入变量和输出变量 的实测值得出状态变量估计值的一类动态系统 xff0c 也称为状态重构器 3 作用 xff1a xff08 1 xff09 滑模观测器不
  • ROS入门_1.18 接下来做什么?

    此时你应该已经对ROS中的一些核心概念有了一定的理解 给你一台运行ROS的机器人 xff0c 你应该能够运用所学知识来列出机器人上发布和订阅的各种话题 xff08 topic xff09 xff0c 查看话题中发布的消息 xff0c 然后编
  • 【git】看懂git diff

    git diff 可以用来比较 xff1a 1 staging area和working area的文件 xff08 无其他参数时 xff09 plain view plain copy print git diff 2 master分支和
  • makefile 自动编译同一个目录下的所有文件

    SOURCE 61 wildcard c OBJS 61 patsubst c o SOURCE CROSS COMPILE 61 arm linux CXX 61 gcc CFLAGS 43 61 static CLFAGS 43 61
  • PX4_Bootloader单步调试配置(STM32F7 配置)

    Bootloader Makefile 编译选项 Os g 43 O0 43 ggdb3 Bootloader libopencm3 lib stm32 f7 Makefile TGT CFLAGS 61 Os g 43 TGT CFLAG
  • 2021北邮自考c++实践题及答案

    北邮c 43 43 实践考期 xff0c 只能在每年的下半年进行报名 xff0c 11月进行考试 由于疫情原因 xff0c 现在均为线上考试 xff0c 每人的考题不同 xff0c 但是大同小异 xff0c 此为2021年的c 43 43
  • 从idea推送代码到github,到jenkins部署,再到从github下载代码完成构建的全部详细操作流程

    目录 1 idea推送代码到github 1 1 github创建 1 2 git下载与安装 xff08 windows xff09 1 3 idea关联github 1 3 1 windows生成公私钥 1 3 2 idea关联githu
  • Jmeter常用场景梳理

    一 在一段时间内持续发送请求 此场景可以用于稳定性测试 xff0c 在稳定性测试中 xff0c 通常需要持续压测几个小时甚至几天时间 xff0c 查看接口是否有报错 xff0c 或者cpu 内存会上涨 xff0c 此时就需要通过控制持续时间
  • vnc viewer连不上,vnc viewer连不上是什么原因?解决方法

    vnc viewer连不上是什么原因 接下来尝试在CentOS上安装一个VNC Server CentOS5 已经自带了VNC xff0c 默认也已经安装了 xff0c 只要配置一下就可以了 如果没有安装 xff0c 可以 yum inst
  • 基于netty框架的JTT808/JTT905/JTT1078协议客户端

    基于netty框架的JTT808 JTT905 JTT1078协议客户端 JTT808客户端网络处理 span class token keyword private span span class token keyword void s
  • The BMJ研究:现有的新冠病毒诊断AI模型,几乎毫无用处

    图片出处 xff1a unsplash 本文作者 xff1a 朱演瑞 新型冠状病毒对全球健康造成了严重的威胁 xff0c 为了减轻医疗保健系统的负担 xff0c 也给患者提供最佳的护理 xff0c 高效的诊断和疾病预后信息问题亟待解决 理论
  • 自动驾驶多传感器融合

    12月28日 xff0c 百度Apollo平台携手国内激光雷达公司禾赛科技扔下一颗名为Pandora的重磅炸弹 xff0c 此举将极大地加快无人驾驶落地的进程 xff0c 却也会让不少自动驾驶初创公司陷入无比尴尬的境地 简单地说 xff0c
  • YMFC-32 小四轴 (一)

    https github com jamesshao8 ymfc mini drone 本博客前几天送出了几个v1 0版本的ymfc小四轴 在这里我要说一下组装教程和使用方法 原材料采购 除了我的板子以外还需要一些零件 1 间距0 254的
  • HackRF 代码讲解 (一)

    本文包括驱动 固件 CPLD代码讲解 xff08 也包括gr osmosdr中的相关部分 xff09 HackRF是比较早期的一款SDR设备 xff0c 凭借其相对低廉的价格加上半双工收发能力 xff0c 在国内的SDR市场中占比很高 这款
  • STM32 GPS悬停飞控 (十)气压计

    上次的飞机有干扰问题 没法解决 可能因为我的元器件有问题 或者走线问题 本来打算按老外的一模一样做一个的 但现在想直接做带GPS的了 因为除GPS 罗盘 气压 数传外基本和上次那个一样的 这些部分即使装上也可以禁用 只剩摇控不一样了 暂时忽
  • 自制嵌入式GUI 【前1-3篇】-基于freeRTOS

    自制GUI第4篇 xff1a https blog csdn net shungry article details 78659613 自制GUI第5篇 xff1a https blog csdn net shungry article d
  • 基于C++的PID控制器

    PID控制器是一种广泛用于各种工业控制场合的控制器 xff0c 它结构简单 xff0c 可以根据工程经验整定参数Kp Ki Kd 虽然现在控制专家提出了很多智能的控制算法 xff0c 比如神经网络 xff0c 模糊控制等 xff0c 但是P
  • 模糊PID控制算法的C++实现

    很久没有更新博客了 xff0c 今天就来讲讲模糊PID的C 43 43 实现方法 先来看一下整体的框架 xff1a 解释下上面框图的意思 xff0c 模糊PID其实是在普通PID的基础之上 xff0c 通过输入的两个变量 xff1a 误差和
  • C++ Map常见用法说明

    一 声明二 插入操作 1 使用 进行单个插入1 使用insert进行单个和多个插入 三 取值四 容量查询五 迭代器六 删除交换 1 删除2 交换 七 顺序比较八 查找九 操作符 C 43 43 中map提供的是一种键值对容器 xff0c 里