map的常见用法

map 是什么?

map是一组键值对的组合,通俗理解类似一种特殊的数组,a[key]=val,只不过数组元素的下标是任意一种类型,而且数组的元素的值也是任意一种类型。有点类似python中的字典。通过"键"来取值,类似生活中的字典,已知索引,来查看对应的信息。(个人理解,其实不准确,内部并不是数组实现的,而是红黑树)

map的定义

map<typename1,typename2> mp;

如果是字符串到其他类型的映射应该使用string

map(string,int) mp;

map的值也可以是stl容器

map(set<int>,string) mp;

map容器内部的访问方式

通过下标来访问

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['c']=10;
mp['c']=20;//10被覆盖
cout<<mp['c']<<endl;
return 0;
}

通过迭代器来访问

map的迭代器和其他集合的迭代器不同,其具有两种类型分别是typename1,typename2。

通过迭代器it要分别访问集合元素的键和值。

it->first访问键,it->second访问值

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}

map会以键从小到大自动排序,就是通过'a','b','c'的顺序来排这三个键值对,这是由于集合内部是通过红黑树来实现的,在建立映射的时候会自动实现从小到大的排序

map中常见函数

find()

find(key)返回键为key的映射的迭代器,时间复杂度为O(logN),N为map重映射的数量。

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
map<char,int>::iterator it=mp.find('a');
cout<<it->first<<' '<<it->second<<endl;
return 0;
}

erase()

删除单个元素

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
map<char,int>::iterator it=mp.find('a');
mp.erase(it);//删除a 10
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}

删除多个元素

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
map<char,int>::iterator it=mp.find('a');
mp.erase(it,mp.end());//删除it之后的所有映射
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}

size()

获取map中映射的对数

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
cout<<mp.size()<<endl;
return 0;
}

清空map中的所有元素

# include <iostream>
# include <map>
using namespace std;
int main(void)
{
map<char,int> mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
mp.clear();//清空map
cout<<mp.size()<<endl;//0
return 0;
}

总结

用途

  • 建立字符串和整数之间的映射
  • 判断数据是否存在
  • 字符串和字符串的映射

map的常见用法的更多相关文章

  1. python map 常见用法

    python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...

  2. STL map 常见用法详解

    <算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. STL pair 常见用法详解

    <算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

  5. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  6. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  7. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  8. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  9. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

随机推荐

  1. 并行计算基础(1)(GPU架构介绍)

    一.常用术语 Task:任务.可以完整得到结果的一个程序,一个程序段或若干个程序段.例如搬砖. Parallel Task:并行任务.可以并行计算的任务.多个人搬砖. Serial Execution ...

  2. ueditor+复制word+图片不能上传

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  3. Nowcoder Two Graphs ( 图的同构 )

    题目链接 题意 : 给出两幅顶点数一样的图 G1.G2 ,现在要求在 G2 中选出一些边集.使之构成一幅新的图 G ,要求 G 要与 G1 同构,现在要你统计合法的 G 有多少种 分析 :  图的同构 ...

  4. cogs1619. [HEOI2012]采花 x

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  5. 「TJOI2019」大中锋的游乐场

    题目链接 问题分析 比较明显的最短路模型.需要堆优化的dij.建图的时候注意细节就好. 参考程序 #include <bits/stdc++.h> #define LL long long ...

  6. sqli-labs(40)

    0X01同样是构造闭合 这里的闭合条件是') 构造语句 ?id=');insert into users values(100,'tx','tx')%23 在客户端mysql里面看看 嘿嘿 成功执行 ...

  7. [CSP-S模拟测试]:陶陶摘苹果(线段树维护单调栈)

    题目传送门(内部题116) 输入格式 第一行两个整数$n,m$,如题 第二行有$n$个整数表示$h_1-h_n(1\leqslant h_i\leqslant 10^9)$ 接下来有$m$行,每行两个 ...

  8. linux 系统的 cache 过大,解决方案

    linux buff/cache过大,清理脚本 2018年06月20日 13:44:53 taozhe666 阅读数:6500   三条指令: sync echo 1 > /proc/sys/v ...

  9. C++入门经典-例5.3例5.4-输出int指针运算后的地址值

    1:代码如下: // 5.3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  10. 第九周学习总结&实验报告(7)

    完成火车站售票程序的模拟. 要求: (1)总票数1000张; (2)10个窗口同时开始卖票; (3) 卖票过程延时1秒钟; (4)不能出现一票多卖或卖出负数号票的情 况 实验代码: package y ...