map(STL容器)
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容器)的更多相关文章
- STL容器——对map排序
STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...
- 【STL容器学习】-关联容器与map的用法
STL提供了4个关联容器:set.multiset.map和multimap.这些容器提供了通过keyword高速存储和訪问数据元素的能力.Set和map不同意有反复keyword,而multiset ...
- C++STL之map映照容器
map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的, 键值与映照数据之间具有一一映照关系. map映照容器的数据结构也是采用红黑树来实现的, 插入元素的键值不允许重复, 比较函数 ...
- 2.9 C++STL map/multimap容器详解
文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- STL容器迭代器失效分析
连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- STL容器与配接器
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector 行为类似于数组,但可以根据要求 ...
- STL容器的本质
http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...
随机推荐
- 记录一个HttpClient超时连接配置不生效的问题排查过程
现象 首先有一个被服务由于内存有限,导致巨卡.导致调用他的服务出现线程阻塞.jstack打印线程池如下所示: 开始排查解决问题 第一步:检查代码看是否超时设置是否正确,因为感觉超时设置正确不可能阻塞. ...
- cesium介绍和国内主要学习网站汇总
Cesium官方网站 建议大家将Cesium官网的博客都读一遍,博客大概分为三类,主要是技术类,比如性能优化,调度算法等,一类是定期的新版本特性,能够了解Cesium新功能和新特性,还有一类是大事记, ...
- 记录一次对MQTT协议的渗透测试经历
前言 由于工作需要,特意翻查了MQTT的相关漏洞,并一一学习复现,在此做以学习记录,没有恶意,如有抄袭,请私信作者删除. 技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等 ...
- PVT:特征金字塔在Vision Transormer的首次应用,又快又好 | ICCV 2021
论文设计了用于密集预测任务的纯Transformer主干网络PVT,包含渐进收缩的特征金字塔结构和spatial-reduction attention层,能够在有限的计算资源和内存资源下获得高分辨率 ...
- Vue——安装
Vue.js 设计的初衷就包括可以被渐进式地采用.这意味着它可以根据需求以多种方式集成到一个项目中. 将 Vue.js 添加到项目中主要有四种方式: 1.在页面上以 CDN 包的形式导入. <s ...
- Python并行运算——threading库详解(持续更新)
0. 写在前面:进程和线程 博文参考: Python的并行(持续更新)_python 并行-CSDN博客 <Python并行编程 中文版> 一些相关概念请见上一篇博文. 1. 在Pytho ...
- Android 13 - Media框架 - 异步消息机制
关注公众号免费阅读全文,进入音视频开发技术分享群! b7693967-317e-4c46-96d3-d40d9d87e382 由于网上已经有许多优秀的博文讲解了Android的异步消息机制(ALoop ...
- Winform程序在VS中打包成安装程序(带卸载)
场景 在VS中进行Winform开发时,可以直接在项目上右击选择生成 则会在项目的bin目录下直接生成exe等文件,此时将这个文件夹直接整个复制到别的地方就可以运行. 但是如果将其做成安装包安装的形式 ...
- EF CORE 命令行
EF 命令行 使用管理台模式 Add-Migration 添加一个新的迁移(名词),string是迁移的名称remove-Migration 删除上一次的迁移Update-Database 更新最近一 ...
- Kubernetes Cluster部署
1.基本环境说明 ip: 192.168.115.149 主机名:node1 CentOS Linux release 7.9.2009,内核版本为3.10.0-1160.81.1.el7.x8 ...