(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

相关文章

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑