STL map 详细用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据 处理能力。
需要的库
#include <map>
基本操作
定义
map<string,int>m;
这是定义了一个以string为关键字,以int为值的map
插入
方法1:
map<string,int>m;
m["Bob"]=;
m["Alice"]=;
m["Eric"]=;
方法2:
m.insert(pair<string,int>("Lee",));
方法3:
m.insert(map<string,int>::value_type("Karen",));
遍历
定义一个迭代指针iter,使其指向map,实现对map的遍历。
#include<bits/stdc++.h> using namespace std; int main()
{
map<string,int>m;
m["Bob"]=;
m["Alice"]=;
m["Eric"]=;
map<string,int>::iterator iter;
for(iter=m.begin(); iter!=m.end(); iter++)
cout<<iter->first <<"->"<<iter->second<<endl;
}
输出为:
Alice->
Bob->
Eric->
可以看到map自动在内部以关键字为准,按字典序排序,而不是根据输入的顺序;
需要注意的是 当我进行实验的时候 我发现这样一个现象:
#include<bits/stdc++.h> using namespace std; int main()
{
map<string,int>m;
m["Bob"]=;
m["Alice"]=;
m["Eric"]=;
map<string,int>::iterator iter;
for(iter=m.begin(); iter!=m.end(); iter++)
cout<<iter->first <<"->"<<iter->second<<endl; if(m["AAA"]==)
cout<<"NO"<<endl; for(iter=m.begin(); iter!=m.end(); iter++)
cout<<iter->first <<"->"<<iter->second<<endl; }
当询问一个map中不存在的数的时候,返回的值应该是0,不过当你再次遍历的时候,就会发现map中已经多了一个键值对,只不过值是0:
Alice->
Bob->
Eric->
NO
AAA->
Alice->
Bob->
Eric->
在做题时一定要好好注意。
查找
方法1:
cout<<m.find("Bob")->second<<endl;
如果按关键字搜索,搜不到的话会输出乱码
方法2:
map<string,int>::iterator iter1;
iter1 = m.find(string("Bob"));
if(iter1 != m.end())
cout<<iter1->first <<"->"<<iter1->second<<endl;
else
cout<<"no fount"<<endl;
定义一个指针,指向map,如果没有的话会返回m.end()
删除
方法1
m.erase(iter1);
同样的是指针的操作
方法2
m.erase(string("AAA"));
或者是根据关键字删除
map的相关函数
- begin() 返回指向map头部的迭代器
- clear() 删除所有元素
- count() 返回指定元素出现的次数
- empty() 如果map为空则返回true
- end() 返回指向map末尾的迭代器
- equal_range() 返回特殊条目的迭代器对
- erase() 删除一个元素
- find() 查找一个元素
- get_allocator() 返回map的配置器
- insert() 插入元素
- key_comp() 返回比较元素key的函数
- lower_bound() 返回键值>=给定元素的第一个位置
- max_size() 返回可以容纳的最大元素个数
- rbegin() 返回一个指向map尾部的逆向迭代器
- rend() 返回一个指向map头部的逆向迭代器
- size() 返回map中元素的个数
- swap() 交换两个map
- upper_bound() 返回键值>给定元素的第一个位置
- value_comp() 返回比较元素value的函数
STL map 详细用法的更多相关文章
- STL map详细用法和make_pair函数
今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得 ...
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
- STL set 详细用法
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. 用到的库 #include <set> 定义 最简单: set<int> a; set和其他的stl一样,都支持 ...
- Atcoder ABC155_C中有关c++ STL map的用法
题目:https://atcoder.jp/contests/abc155/tasks/abc155_c 这道题的题意是给我们n个string,让我们统计每个string出现的次数,并输出次数最多的一 ...
- STL map的用法介绍!
map对象的定义 使用前添加map头文件,必须分别指明键和值的类型: map<string,int>word_count; map的构造函数: map<k,v>m; 创建一 ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- STL map 用法
首先make_pair Pairs C++标准程序库中凡是"必须返回两个值"的函数, 也都会利用pair对象 class pair可以将两个值视为一个单元.容器类别map和mul ...
- map的详细用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- STL中map的用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
随机推荐
- python字典的内建函数
In [70]: test=dict(x=1,y=2,z=3) In [71]: test Out[71]: {'x': 1, 'y': 2, 'z': 3} In [72]: a=['a','b', ...
- 利用GitLab自动同步软件仓库
利用GitLab自动同步GitHub.Gitee.Bitbucket软件仓库 我在码云的账号:userName密码:password项目地址:https://gitee.com/Bytom/bytom ...
- 一、Linux常用命令
1.ls 作用:列出文件信息,默认为当前目录下 语法: -a:列出所有的文件,包括以.开头的隐藏文件 -d:列出目录本身,并不包含目录中的文件 -h:和-l一起使用,文件大小人类易读 -l:长输出(“ ...
- dubbo源码分析02:服务引用
一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterProp ...
- java.nio.Buffer源码阅读
Java 自从 JDK1.4 起,对各种 I/O 操作使用了 Buffer 和 Channel 技术.这种更接近于操作系统的的底层操作使得 I/O 操作速度得到大幅度提升,下面引用一段<Java ...
- Laravel --- 要点笔记
一.路由: // 常规用法 Route::get('/',function(){ return 'get'; }) // 匹配多个 Route::match(['get','post'],'/',fu ...
- Babel是什么?
要是官方文档写得好的话,我也许就不用自己做个笔记. 官方文档 Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运 ...
- Paxos算法——前世
Paxos算法是基于消息传递且具有高度容错特性的一致性算法.我们将从一个简单的问题开始,逐步的改进我们的设计方案,最终得到Paxos,一个可以在逆境下工作的协议. 一.客户端-服务器模型 我们从最小的 ...
- 1.谈谈对Java平台的理解
1.谈谈你对Java平台的理解 Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“一次编译,到处运行”(Compile once,run anywhere),能够非常容易地获取跨 ...
- Cisco packet tracer6.0下的网络工程实训
期末的专业实训,在cisco6.0下配置一个简单的局域网.主要用到了下面几个技术:dhcp中继.vlan的划分.链路聚合.静态nat.ospf协议.访问控制列表.先看一下总的拓扑图,在分步实现功能. ...