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. Jquery实现div左右重复来回走动

    <!DOCTYPE HTML><html><head> <meta charset=utf-8 /> <title>UFO来了</ti ...

  2. 《剑指offer》算法题第三天

    今日题目: 斐波那契数列 青蛙跳台阶问题(及其变种:变态跳台阶) 矩形覆盖 旋转数组的最小数字 矩阵中的路径 机器人的运动范围 细心的同学会发现,第1,2,3题其实对应的是<剑指>书上的同 ...

  3. sh_08_格式化字符串

    sh_08_格式化字符串 info_tuple = ("小明", 21, 1.85) # 格式化字符串后面的 `()` 本质上就是元组 print("%s 年龄是 %d ...

  4. NS3安装

    1.添加源sudo vim /etc/apt/sources.list deb http://archive.ubuntu.com/ubuntu/ trusty main universe restr ...

  5. AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)

    如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...

  6. Misha and Permutations Summation

    A - Misha and Permutations Summation 首先这个 mod n! 因为数量级上的差别最多只会对康拓展开的第一项起作用所以这个题并不需要把 ord (p) 和 ord ( ...

  7. 客户端框架-MVC

    MVC Model-View-Controller MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model( ...

  8. python学习之路(18)

    返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: >>> def a(* ...

  9. 如何使用IDEA运行 一个分布式的项目

    前一段时间,曾不止一次的尝试过,如何把一个分布式的maven项目,用IDE运行起来.连续的几次失败,让我明白之前启动的方式是有问题的.因此把正确的启动方式整理了一下 .引以为戒 一.起初启动失败的原因 ...

  10. spark 2015 发展方向

    https://www.youtube.com/watch?v=YWppYPWznSQ    Databrick的spark 2015规划聚会的视频,看起来今年会在SQL和MLlib上发力多一点.   ...