C++入门教程||C++地图用法

news2024/12/26 11:54:53

C++地图用法

C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在 map 中出现一次;第二个称之为该关键字的对应值。在一些程序中建立一个 map 可以起到事半功倍的效果,本文为大家总结了 map 的一些基本简单的操作!

地图示例

Map的使用

  1. 需要导入头文件

    #include <map> // STL头文件没有扩展名.h
  2. map 对象是一个模版类,需要关键字和存储对象两个模版参数
     std::map<int , std::string> person;
  3. 可以对模版进行类型定义使其使用方便
    typedef std::map<int , std::string> MAP_INI_STRING;
    MAP_INI_STRING person;

Map 的构造

1、映射最基本的构造函数;

std::map<int , std::string> mapPerson;

2、地图添加数据;

1) insert 函数插入 pair 数据

std::map < int , std::string > mapPerson;
mapPerson.insert(pair < int,string > (1,"Jim"));

2)insert 函数插入 value_type 数据

mapPerson.insert(std::map < int, std::string > ::value_type (2, "Tom"));

3)用数组方式插入数据

mapPerson[3] = "Jerry";

3、地图数据的遍历

三种最常用的遍历方法:

1)前向迭代器

std::map < int ,std::string > ::iterator it;
    std::map < int ,std::string > ::iterator itEnd;
    it = mapPerson.begin();
    itEnd = mapPerson.end();
    while (it != itEnd) {
	cout<<it->first<<' '<<it->second<<endl;  
	it++;
}

2)反向迭代器

std::map < int, string > ::reverse_iterator iter;  
for(iter = mapPerson.rbegin(); iter != mapPerson.rend(); iter++) 
	cout<<iter->first<<"  "<<iter->second<<endl;  

3)数组形式

mapPerson.insert(std::map<int, std::string>::value_type (1, "Tom"));
mapPerson[2] = "Jim";
mapPerson[3] = "Jerry";

int nSize = mapPerson.size();
for(int n = 1; n <= nSize; n++)
	qDebug()<<QString::fromStdString(mapPerson[n]);

三种都是遍历,建议使用前向迭代器,慎用使用数组形成(角标开始位置谨慎)。

4、map 中元素的查找:

find() 函数返回一个迭代器指向键值为 key 的元素,如果没找到就返回指向 map 尾部的迭代器。

 map<int ,string > ::iterator l_it;; 
   l_it = maplive.find(112);
   if(l_it == maplive.end())
                cout<<"we do not find 112"<<endl;
   else cout<<"wo find 112"<<endl;

5、map 中元素的删除:

如果删除 112;

iterator erase(iterator it)	;//通过一个条目对象删除
iterator erase(iterator first,iterator last);	//删除一个范围
size_type erase(const Key&key);	//通过关键字删除
clear();//就相当于enumMap.erase(enumMap.begin(),enumMap.end());

6、地图中 交换的用法:

Map 中的 swap 不是一个容器中的元素交换,而是两个容器交换;

示例:

 #include <map> 
 #include <iostream>
  using namespace std;
  int main( )
  {
      map < int, int > m1, m2, m3;
      map < int, int >::iterator m1_Iter;
      m1.insert ( pair < int, int >  ( 1, 10 ) );
      m1.insert ( pair < int, int >  ( 2, 20 ) );
      m1.insert ( pair < int, int >  ( 3, 30 ) );
      m2.insert ( pair < int, int >  ( 10, 100 ) );
      m2.insert ( pair < int, int >  ( 20, 200 ) );
      m3.insert ( pair < int, int >  ( 30, 300 ) );
   cout << "The original map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " " << m1_Iter->second;
      cout   << "." << endl;
   // This is the member function version of swap
   //m2 is said to be the argument map; m1 the target map
   m1.swap( m2 );
   cout << "After swapping with m2, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " " << m1_Iter -> second;
      cout  << "." << endl;
   cout << "After swapping with m2, map m2 is:";
   for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
      cout << " " << m1_Iter -> second;
      cout  << "." << endl;
   // This is the specialized template version of swap
   swap( m1, m3 );
   cout << "After swapping with m3, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " " << m1_Iter -> second;
      cout   << "." << endl;
}

7、地图的 排序问题:

Map 中的元素是自动按 key 升序排序,所以不能对 map 用 sort 函数:

示例:

 #include <map>  #include <iostream>
 using namespace std;
 int main( )
 {
   map < int, int > m1;
   map < int, int >::iterator m1_Iter;
   m1.insert ( pair < int, int >  ( 1, 20 ) );
   m1.insert ( pair < int, int >  ( 4, 40 ) );
   m1.insert ( pair < int, int >  ( 3, 60 ) );
   m1.insert ( pair < int, int >  ( 2, 50 ) );
   m1.insert ( pair < int, int >  ( 6, 40 ) );
   m1.insert ( pair < int, int >  ( 7, 30 ) );
   cout << "The original map m1 is:"<<endl;
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout <<  m1_Iter->first<<" "<<m1_Iter->second<<endl;
}

8、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() 交换两个地图

upper_bound() 返回键值>给定元素的第一个位置

value_comp() 返回比较元素值的函数

 

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

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

相关文章

最难用的鼠标键、设置半天、反人类逻辑(罗技)

目的&#xff1a;高效设置罗技鼠标键&#xff0c;提高复制粘贴效率 准备软件&#xff1a;Logitech G HUB – Logitech 支持 下载 1、右上角&#xff0c;点击箭头、点击管理配置文件 2、左下角、点击加号&#xff0c;创建配置文件“办公” 3、点击办公 4、右上角选择“办公”…

蓝桥云课ROS机器人旧版实验报告-01入门

项目名称 实验一 ROS[Kinetic/Melodic/Noetic]入门 成绩 设计要求&#xff1a; 机器人操作系统安装、虚拟机、Docker、嵌入式系统 实验记录&#xff08;70分&#xff09; 1.以 $ 开头的行是终端命令。 - 要打开一个新终端 → 使用快捷键 ctrlaltt。 - 要在现有终端内…

Mac端口扫描工具

端口扫描工具 Mac内置了一个网络工具 网络使用工具 按住 Command 空格 然后搜索 “网络实用工具” 或 “Network Utility” 即可 域名/ip转换Lookup ping功能 端口扫描 https://zhhll.icu/2022/Mac/端口扫描工具/ 本文由 mdnice 多平台发布

生成测试报告就万事大吉了吗?NO,升职加薪就差这一步啦!- 04(非常详细,非常实用)

简介 上一篇生成测试报告&#xff0c;小伙伴们和童鞋们就又问道&#xff0c;测试报告已经生成了&#xff0c;怎么发送给相关的负责人了&#xff1f;小伙伴们和童鞋们不要着急&#xff0c;慢慢给你道来&#xff0c;心急吃不了热豆腐哈。这些小伙伴们的表现还是不错的&#xff0c…

光学捕捉怎么选择数据手套?

数据手套是通过在vr手套内置传感器&#xff0c;采集手部运动数据的硬件设备&#xff0c;通常应用于模拟仿真、虚拟现实交互、数字人动画制作等领域&#xff0c;随着创作者对动作捕捉精度要求越来越高&#xff0c;在使用光学捕捉中需要使用数据手套进行手指动作捕捉&#xff0c;…

前端技术Vue学习笔记--002

前端技术Vue学习笔记 文章目录 前端技术Vue学习笔记1、指令修饰符2、v-bind对于样式控制的增强2.1、v-bind对于样式控制的增强--class2.2、v-bind对于样式控制的增强--操作style 3、v-model应用于其他表单元素4、计算属性4.1、**computed计算属性 vs methods方法的区别**4.2、计…

使用IPSEC VPN实现隧道通信实验

目录 1、首先为各个接口配置ip&#xff08;如图中&#xff09; 2、实现公网互通 3、测试是否全网互通 4、R1配置 5、R3配置 6、测试 IPSEC介绍&#xff1a;ipsec是一种基于网络层&#xff0c;应用密码学的安全通信协议簇&#xff0c;目的是在网络层环境ipv4,ipv6提供灵活的…

Spark提交流程

客户端通过脚本将任务提交到yarn执行&#xff0c;yarn启动APPMaster&#xff0c;APPMaster启动Driver线程&#xff0c;Driver负责初始化SparkContext并进行任务的切分和分配任务&#xff0c;交给Executor进行计算。

成就、对话、展望 | 浙江省饭店风云大会暨协会成立20周年庆典隆重召开

2023年7月30日-31日&#xff0c;由浙江省饭店业协会主办&#xff0c;浙江金华君澜大饭店协办的浙江省饭店风云大会暨协会成立20周年庆典在浙江金华君澜大饭店召开。浙江省各地饭店人、合作商、旅游院校代表、获奖代表共计300余人参加大会&#xff0c;共贺浙江省饭店业协会成立2…

unittest单元测试框架使用技巧

这里我们将要用的unittest是python的单元测试框架&#xff0c;它的官网是 25.3. unittest — Unit testing framework — Python 2.7.18 documentation&#xff0c;在这里我们可以得到全面的信息。 当我们写的用例越来越多时&#xff0c;我们就需要考虑用例编写的规范与组织&a…

npm -v无法显示版本号

情况&#xff1a; 删除C盘下.npmrc文件后解决。路径 C:\Users\Dell 记录一下这个解法。

maven下载按照及初次使用相关配置

maven下载按照及初次使用相关配置 一、下载 与安装 依赖Java&#xff0c;需要配置JAVA_HOME设置MAVEN自身的运行环境&#xff0c;需要配置MAVEN_HOME测试环境配置结果 MVN测试成功&#xff01;&#xff01;&#xff01; 二、本地仓库配置 Maven启动后&#xff0c;会自动保…

Devops系统中jira平台迁移

需求:把aws中的devops系统迁移到华为云中,其中主要是jira系统中的数据迁移,主要方法为在华为云中建立一套 与aws相同的devops平台,再把数据库和文件系统中的数据迁移,最后进行测试。 主要涉及到的服务集群CCE、数据库mysql、弹性文件服务SFS、数据复制DRS、弹性负载均衡ELB。 迁…

闲置资源优化,轻松检查集群中的空闲成本

作者&#xff1a;梁成昊&#xff08;景祁&#xff09; 前言 Kubernetes 提供了对计算、网络、存储资源的抽象&#xff0c;提升了集群资源管理的效率。然而&#xff0c;由于用户不需要直接管理底层资源&#xff0c;可能导致部分闲置资源未及时发现&#xff0c;造成成本浪费。在…

Linux之 Ubuntu 安装常见服务 (二) Tomcat

安装TomCat 服务 1、安装JDK环境 https://www.oracle.com/java/technologies/downloads/ 下载的官网 wget https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.deb (sha256) 使用dpkg进行软件安装时&#xff0c;提示&#xff1a;dpkg&#xff1a;处理软件包XX…

代客泊车AVP_BLE_KBCM交互规范

Revision Record 版本记录 Revision 版本 Date 时间 Author 作者 Section # 章节 Change Description 修改记录 Table of Contents 目录 1 Revision Record 版本记录... 2 2 Table of Contents 目录... 3 …

数据结构:链表的一些经典的OJ题目,环形链表问题

文章目录 写在前面链表OJ调试技巧移除链表元素反转链表链表的中间节点链表中倒数第K个节点链表分割问题环形链表 写在前面 本篇为本人学习链表的过程中遇到的典型OJ题&#xff0c;于是整理出来分享思路和便于后续重新学习&#xff0c;每个标题均可跳转至对应习题&#xff0c;大…

未注册商标乱用R标识,后果很严重!

在生活中&#xff0c;如果你留心观察的话会发现&#xff0c;很多品牌会在商标的右上角或右下角印一个标识。这个代表什么含义呢&#xff1f;哪些商标可以使用&#xff1f;私自乱用会有什么后果&#xff1f; 其实&#xff0c;标识代表的是“注册商标”&#xff0c;即这个商标是…

PostMan调用metersphere接口 ,copy完事~

获取token接口&#xff1a; http://192.****:8081/signin &#xff0c;接下来就可以调用其他功能的接口了 例&#xff1a;创建账户&#xff0c;将获取到的access_token放置在接口请求的token中 其他接口调用同上

SpringBoot笔记:SpringBoot集成Dataway

文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway? 官网地址&#xff1a;https://www.hasor.net/docs/guides/quickstart Da…