map

一种基于红黑树(不需了解)的关联树容器,支持快速的插入,查找和删除操作,并保持了内部元素的有序性,其中每一个元素都有一个键和一个与之关联得值组成。

可以形象的理解为一个转换器,给它一个东西(变量),它就对应的给你一个东西(变量)。

我们无需了解map的底层结构 , 只需知道如何使用以及相关的时间复杂度即可;

(1.map的结构:

在map中,\(i\)个\(key\)值,确定了\(i\)个\(<key,value>\)键值对,但是由于其内部的特殊结构,在进行各项操作时复杂度都很优秀。

(2.map初始化

在使用map时,需引入头文件<map>(如果是万能头当我没说)。

#include<map>
//#include<bits/stdc++.h> //懒人之选
using namespace std; //map在std的命名空间中

例:

我们用上面的代码来声明一个map,其中\(T_key\),\(T_value\)为数据类型

一般情况下,我们只声明一个空的\(map\),然后再往里面插入键值对。

注:在map键值对中<key,value>中,一个\(key\)唯一对应一个\(value\),不同的\(key\)有可能对应

相同的\(value\),就像数学函数中自变量和因变量的关系。

(3.map的基本操作

方法 作用 时间复杂度
insert({key,value}) 插入一对键值对<key,value> \(O(log_n)\)
erase(key) 消除key所对的键值对 \(O(log_n)\)
find(key) 查找指定键key所对的迭代器 \(O(log_n)\)
operator[key] 查找指定键key所对的值 \(O(log_n)\)
count(key) 查找是否存在key的键值对 \(O(log_n)\)
size() 返回map中键值对的数量 \(O(1)\)
clear() 清空map中的键值对 \(O(n)\)
empty() 判断map是否为空 \(O(1)\)
begin() 返回第一个键值对所对的迭代器 \(O(1)\)
end() 返回最后一个键值对所对的迭代器 \(O(1)\)

注:在进行取值操作(\([]\) 操作符)时,一定保证key值存在,否则会产生错误,判断是否存在有如下几种方法:

map<int,int>mp;

//1.运用count函数:
if(mp.count(key))
cout<<"1"<<endl;
//2.运用find函数
if(mp.find(key)!=mp.end)
cout<<"1"<<endl;

遍历map一般也有两种方法:

map<int,int>mp;
//1.用auto关键字进行遍历
for(auto &i : mp)
cout<<i.first<<" "<<i.second<<endl;
//2.用迭代器进行遍历
map<int,int>::iterator it; for(it=mp.begin();it!=mp.end;it++){
//cout<<(*it).first<<" "<<(*it).second<<endl;
cout<<it->first>>" ">>it->second>>endl;
}

map(STL容器)的更多相关文章

  1. STL容器——对map排序

    STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...

  2. 【STL容器学习】-关联容器与map的用法

    STL提供了4个关联容器:set.multiset.map和multimap.这些容器提供了通过keyword高速存储和訪问数据元素的能力.Set和map不同意有反复keyword,而multiset ...

  3. C++STL之map映照容器

    map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的, 键值与映照数据之间具有一一映照关系. map映照容器的数据结构也是采用红黑树来实现的, 插入元素的键值不允许重复, 比较函数 ...

  4. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

  5. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  6. STL容器迭代器失效分析

    连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...

  7. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  8. STL容器的遍历删除

    STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...

  9. STL容器与配接器

    STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求 ...

  10. STL容器的本质

    http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...

随机推荐

  1. k8s问题解决

    问题1: 问题描述:k8s中Terminating状态pod不能删除 [root@master ~]# kubectl get pods -n ms NAME READY STATUS RESTART ...

  2. 四、Doris物化视图

    使用场景:  在实际的业务场景中,通常存在两种场景并存的分析需求:对固定维度的聚合分析 和 对原始明细数据任意维度的分析. 例如,在销售场景中,每条订单数据包含这几个维度信息(item_id, sol ...

  3. 【详细教程】手把手教你开通YouTube官方API接口(youtube data api v3)

    一.背景调查 1.1 youtube介绍 众所周知,youtube是目前全球最大的视频社交平台,该平台每天产生大量的视频内容,涵盖各种主题和类型,从音乐视频到教育内容,再到娱乐节目和新闻报道等.You ...

  4. 使用beego/bee热启动gin框架

    目录 1.需要关闭gomod 2.安装 bee 3.再开启gomod 4.启动服务 效果: 1.需要关闭gomod export GO111MODULE=off 2.安装 bee go get -u ...

  5. ES6常用知识点笔记

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准. 因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015(简称ES2015).虽然浏览器在不 ...

  6. 【AnaTraf 分享】什么是 AnaTraf?为什么设计 AnaTraf?

    网络流量分析与 AnaTraf "2013年,网络流量分析技术(NTA, Network Traffic Analysis)的概念被首次提出,在2016年逐渐兴起.2017年,NTA被Gar ...

  7. 鸿蒙Blank

    Blank组件占剩余空间,类似占位组件一样

  8. Axure和墨刀——两款原型设计工具介绍

    Axure与墨刀是两款在原型设计领域广受欢迎的工具,各具特点和优势: Axure: Axure RP是一款功能强大的原型设计工具,广泛应用于交互设计和用户体验设计领域.它提供了丰富的交互元素库.高保真 ...

  9. 本地项目文件上传到git

    初始化项目: git init 与服务器项目关联:git remote add origin "http://**************************/r/ruoyi.git&q ...

  10. winform 关于无边框和拖动窗体边缘改变尺寸的 踩坑笔记

    在做美化winform窗体,实现自定义窗体标题栏,圆角边框,并且支持拖拽窗体,最后还要能拖动窗体左.右.下边缘时,改变窗体的宽和高. 一般网上的都有代码,窗体设成无边框,自己加个panel就能实现自定 ...