C++的map介绍以及插入操作_实践求真知-程序员宝宝_map插入

技术标签: C++  

一 点睛

Map是STL的一个关联容器,它提供一对一(其中第一个称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力。map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

1 map简介

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

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

2 map的功能

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

根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。

快速插入Key -Value 记录。

快速删除记录

根据Key修改value记录。

遍历所有记录。

3 使用map

使用map得包含map类所在的头文件

#include <map>

map对象是模板类

template<class Key, class T, class Compare=less<Key>,
         class Allocator = allocator<pair<const Key,T>>>
class map;

其中:

  • Key:关键字类型,每个元素都被关键字Key独一无二地标识。
  • T:元素类型。每一个元素都可以存放一些数据。
  • Compare:比较类。
  • allocator:它表示存储管理设备。

4 map的插入有3种方式:用insert函数插入pair数据,用insert函数插入value_type数据和用数组方式插入数据。

二 用insert函数插入pair数据

1 代码

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<int, string> mapStudent;
    mapStudent.insert(pair<int, string>(1, "student_one"));
    mapStudent.insert(pair<int, string>(2, "student_two"));
    mapStudent.insert(pair<int, string>(3, "student_three"));
    map<int, string>::iterator iter;
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++){
       cout<<iter->first<<" "<<iter->second<<endl;
    }
    return 0;
}

2 运行

[[email protected] charpter03]# g++ 0318.cpp -o 0318
[[email protected] charpter03]# ./0318
1 student_one
2 student_two
3 student_three

3 说明

pair的定义

template <class T1, class T2>
struct pair{
  typedef T1 first_type;
  typedef T2 second_type;
  T1 first;//注意,它是public
  T2 second;//注意,它是public
  pair() : first(T1()),second(T2()) {}
  pair(const T1&a,const T2&b) :first(a),second(b) {}

};

该例定义了一个key为int类型,value为string类型的map,用insert插入pair,在insert的参数中将(1,"student_one")转换为pair数据再进行插入。

三 用insert函数插入value_type数据

1 代码

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    map<int, string> mapStudent;
    mapStudent.insert(map<int, string>::value_type (1,"student_one"));
    mapStudent.insert(map<int, string>::value_type (2,"student_two"));
    mapStudent.insert(map<int, string>::value_type (3,"student_three"));
    map<int, string>::iterator  iter;
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++){
       cout<<iter->first<<" "<<iter->second<<endl;
    }
    return 0;
}

2 运行

[[email protected] charpter03]# g++ 0319.cpp -o 0319
[[email protected] charpter03]# ./0319
1 student_one
2 student_two
3 student_three

3 说明

声明了一个key为int类型,value为string类型的map,用insert函数插入value_type数据,插入前,需要将(1,"student_one")转换为map<int,string>::value_type数据再插入。

四 map中用数组方式插入数据

1 代码

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main(){
    map<int, string> mapStudent;
     mapStudent[1] =  "student_one";
     mapStudent[2] =  "student_two";
     mapStudent[3] =  "student_three";
    map<int, string>::iterator  iter;
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++){
          cout<<iter->first<<"  "<<iter->second<<endl;
    }
     return 0;
}

2 运行

[[email protected] charpter03]# g++ 0320.cpp -o 0320
[[email protected] charpter03]# ./0320
1  student_one
2  student_two
3  student_three

3 说明

展示了用数组方式在map中插入数据,和数组访问一样,有下标、直接赋值。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chengqiuming/article/details/89810888

智能推荐

【搜索】三维扫描_dnldnth的博客-程序员宝宝

2:三维扫描源程序名            scan.???(pas, c, cpp)可执行文件名        scan.exe输入文件名          scan.in输出文件名          scan.out【问题描述】    工业和医学上经常要用到一种诊断技术——核磁共振成像(Magnetic Resonance Ima

网站反爬虫策略_weixin_30909575的博客-程序员宝宝

反爬虫策略,表面上看似乎跟WEB系统优化没有关系,经过分析,发现该策略是可以归到WEB性能优化的系列之中。 通过分析apache日志发现,某系统40%的带宽和服务器资源都消耗在爬虫上,如果除去10%-15%搜索引擎的爬虫,做好反爬虫策略,能节省20%-25%的资源,其实是变向优化了web系统。一、爬虫请求与正常用户请求的区别 爬虫请求是类似httpClient的...

作者:陈雷 (Jackei)---转学ab性能测试工具_让程序猿疯狂的博客-程序员宝宝

按照原定计划,今天开始研究 JMeter,一天的时间看完了大半的 User Manual,发现原来只要沉住气,学习效率还是蛮高的,而且大堆的英文文档也没有那么可怕 ^_^本来想顺便把文档翻译一下,不过后来想了想,看懂是一回事,全部翻译出来又是另外一回事了,工作量太大,而且这也不是我一开始要研究 JMeter 的本意。不如大家有兴趣一起研究的遇到问题再一起讨论吧。开源工具通常...

程序员们有些什么好玩儿的程序分享?_九章算法的博客-程序员宝宝

faceaistar:5.5k入门级的人脸、视频、文字检测以及识别的项目。功能包含人脸监测、轮廓识别、头像合成、性别识别、图片修复等。照片的风格变换star:2.4k用TensorFlow实现,通过使用CNN将一幅图像的内容与另一幅图像的样式分离并组合在一起,从而合成一幅模仿画。以下是将“星空”的艺术风格转移到非洲狮子照片上的示例:对对联工具star:3.7k这是一个使用se...

RedisTempalte 同时连接redis的集群模式和哨兵模式_比嗨皮兔的博客-程序员宝宝

1、maven 依赖包 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; ...

C语言的队列的初始化和先进先出的简洁程序_大魔头的小八怪的博客-程序员宝宝

#include#include#includetypedef struct node{        int data;    struct node *next;  }queue; typedef struct pointer {  queue *front;  queue *rear;  }qpointer;

随便推点

Win10 安装 VMWare中 MAC OS X的安装,VMWare tools的配置与iOS的Helloworld_dengla6847的博客-程序员宝宝

iOS的开发必须在MAC OS X系统下进行,这很蛋疼,现在MACBOOK动不动就上千上万大洋,这足够买台配置怪兽了,好吗?然而,我们是可以通过在VMWare中安装MAC OS X进行iOS开发的。对于苹果公司,这种我什么都不熟悉,就要先缴费,而且不便宜的费用的收费模式,我是坚决抵制的。毕竟在这个神奇的国度,连网游都是先上车后补票,好吗?一、事前准备首先,VMWare安装出MAC...

如何判断一个以太坊地址是不是合约地址?_linyuhan3232的博客-程序员宝宝

转载自https://blog.csdn.net/shebao3333/article/details/80043317使用web3.jsweb3.eth.getCode()方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀0x。利用这个我们可以进行判断,例如:var code = web3.eth.getCode(&quot;0xbfb2e296d9...

[CODEVS1917] 深海机器人问题(最小费用最大流)_weixin_30407099的博客-程序员宝宝

传送门【问题分析】最大费用最大流问题。【建模方法】把网格中每个位置抽象成网络中一个节点,建立附加源S汇T。1、对于每个顶点i,j为i东边或南边相邻的一个节点,连接节点i与节点j一条容量为1,费用为该边价值的有向边。2、对于每个顶点i,j为i东边或南边相邻的一个节点,连接节点i与节点j一条容量为无穷大,费用为0的有向边。3、从S到每个出发点i连接一条容量为该点出发的机器人数量,...

Linux twm_polimo的博客-程序员宝宝

在linux安装GO,修改了环境变量。GO_PATH=/opt/go/goJAVA_HOME=/usr/java/jdk1.6.0_31PATH=$JAVA_HOME/bin:$GO_PATH/bin[color=red]:[/color]$PATH上面文件中:(冒号)红色标记处,编写的时候写成了;(分号),导致下次linux启动时直接进入了twm(TWM 是TabWi...

高通平台Android 蓝牙调试和配置手册--如何抓取log_专业开发者的博客-程序员宝宝_android 蓝牙调试

1.Android蓝牙调试概述使用本文档可以使用以下方法调试一些常见的蓝牙问题:■ Android主机日志(ADB logcat)■ 蓝牙日志■ 音频配置文件日志■ 数据配置文件日志■ GAP和core堆栈日志■ 可重复使用的堆栈日志本文档还可用于配置Android属性和调试SplitA2DP问题.2. Android 平台日志使用下表调试日志:WCNSS firmware crash 需要 RAMDUMP 日志, 该文件在/data/vendor/ssrd

Kali Linux-2021.4a下载安装全过程_赵凡星的博客-程序员宝宝_kali linux下载教程

一、镜像下载;下载镜像地址通过阿里云开源镜像站进行下载;https://mirrors.aliyun.com/kali-images/二、系统安装;说明:本次安装流程通过虚拟机进行。1、虚拟机配置镜像文件2、系统安装开机进入安装界面选择第一个按回车(图形化安装)等待配置完成,进入下一个界面等待配置完成,进入下一个界面等待配置完成,进...