(P28)map:map介绍 ,插入数据 ,查找与修改 ,删除

2024-06-08 06:08

本文主要是介绍(P28)map:map介绍 ,插入数据 ,查找与修改 ,删除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.map介绍
    • 2.插入数据
    • 3.查找与修改
    • 4.删除

1.map介绍

  • 使用map得包含map类所在的头文件
#include <map>
  • map实际上是一种关联性容器,基于<key,value>来存储的,是哈希表的变种,内部数据结构是红黑树(一种特殊的二叉树)
  • 定义一个map对象:
map<string, int>可以看作是一个模板类,实例化一个模板类对象mapTestmap<string, int> mapTest;//用string作为索引,存储int对象

2.插入数据

  • 插入数据的4种方法
mapTest["aaa"] = 100;//用下标的方式插入mapTest.insert(map<string, int>::value_type("bbb",200));mapTest.insert(pair<string,int>("ddd", 400));mapTest.insert(make_pair<string, int>("ccc", 300));

在这里插入图片描述

在这里插入图片描述

  • eg:P28\01.cpp
#include <iostream>
#include <map>
using namespace std;int main(void)
{//key类型是string,有一定的限制//value值类型是int,无限制//因为插入到map容器内部的元素默认是按照key从小到大来排序//所以key类型一定要重载<运算符,这样才可以进行比较和排序map<string,int> mapTest;//仅仅是对value来讲//内部重载了[]运算符,效率低一些,但是直观:因为经历2步:首先插入key=“aaa”的元素,初始值等于int类型的默认值,为0//第二步,再把100赋值给它//也就是说,先构造一个元素,其值是默认值,若是类的话,就使用类的构造函数来构造一个对象,放到map容器内部,然后再把//该对象赋值给它(上面的对象)mapTest["aaa"] = 100;//int& operator[](const string& index)mapTest["eee"] = 500;mapTest["eee"] = 300;//可以更新原来eee的值//构造了一个value_type对象//(map<string, int>::value_type这是一个类类型,第一个参数是key,第二个参数是valuemapTest.insert(map<string, int>::value_type("bbb", 200));mapTest.insert(map<string, int>::value_type("bbb", 2000));//不可以更新原来bbb的值//构造一个pair对象,pair是一个类类型mapTest.insert(pair<string,int>("ccc", 300));mapTest.insert(pair<string,int>("ccc", 3000));//不可以更新原来ccc的值//make_pair是一个函数,它返回的就是pair类型对象,与上面的等价mapTest.insert(make_pair("ddd",400));mapTest.insert(make_pair("ddd",4000));//不可以更新原来ddd的值//遍历map容器,也使用迭代器map<string, int>::const_iterator it;for(it=mapTest.begin(); it!=mapTest.end(); ++it) {//it->first就是string,it->second就是int//输出会自动按照key来排序cout<it->first<<" "<<it->second<<endl;}return 0;}
  • 测试:

在这里插入图片描述

3.查找与修改

  • 2种方法
    //方法1,若bbb的值为0,或者不存在bbb的值,其n返回值都为0,不知道能不能找到int n = mapTest["bbb"];cout<<n<<endl;mapTest["bbb"] = 2000;//方法2:与方法1相比,可以判断是否找到 map<string, int>::iterator it;it = mapTest.find("ccc");if(it != mapTest.end()){//将找到的ccc的值修改为3000,若是const_iterator,则不能赋值,因为是常量it->second = 3000;}else{cout<<"not found"<<endl;}
  • eg:P28\02.cpp
#include <iostream>
#include <map>
using namespace std;int main(void)
{map<string,int> mapTest;mapTest["aaa"] = 100;//int& operator[](const string& index)mapTest.insert(map<string, int>::value_type("bbb", 200));mapTest.insert(pair<string,int>("ccc", 300));mapTest.insert(make_pair("ddd",400));//查找key=“bbb”的值//方法1,若bbb的值为0,或者不存在bbb的值,其n返回值都为0,不知道能不能找到int n = mapTest["bbb"];cout<<n<<endl;mapTest["bbb"] = 2000;//方法2:与方法1相比,可以判断是否找到 map<string, int>::iterator it;it = mapTest.find("ccc");if(it != mapTest.end()){//将找到的ccc的值修改为3000,若是const_iterator,则不能赋值,因为是常量it->second = 3000;}else{cout<<"not found"<<endl;}//遍历map容器,也使用迭代器// map<string, int>::const_iterator it;for(it=mapTest.begin(); it!=mapTest.end(); ++it) {cout<it->first<<" "<<it->second<<endl;}return 0;}
  • 测试:
    在这里插入图片描述

4.删除

  • 2种方法
    //erase可以通过key,也可以通过迭代器//方法1mapTest.erase("bbb");//方法2//遍历map容器,也使用迭代器map<string, int>::const_iterator it;it = mapTest.find("ccc");if (it != mapTest.end()){mapTest.erase(it);}

eg:P28\03.cpp

#include <iostream>
#include <map>
using namespace std;int main(void)
{map<string,int> mapTest;mapTest["aaa"] = 100;//int& operator[](const string& index)mapTest.insert(map<string, int>::value_type("bbb", 200));mapTest.insert(pair<string,int>("ccc", 300));mapTest.insert(make_pair("ddd",400));//erase可以通过key,也可以通过迭代器//方法1mapTest.erase("bbb");//方法2//遍历map容器,也使用迭代器map<string, int>::const_iterator it;it = mapTest.find("ccc");if (it != mapTest.end()){mapTest.erase(it);}//也可以在遍历的时候删除,要注意++it的使用,不懂的话参看P27\02.cppfor(it=mapTest.begin(); it!=mapTest.end(); ++it) {cout<it->first<<" "<<it->second<<endl;}return 0;}
  • 测试:
    在这里插入图片描述

这篇关于(P28)map:map介绍 ,插入数据 ,查找与修改 ,删除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041381

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤