STL容器 -- Map
核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序.
头文件: #include <map>
拓展: multimap 是一个多重映照容器,键值可以重复.unordered_set 是一个内部不排序的映射容器,需包含头文件<unordered_map>
构造方法:
map<int, string> kvm; //构造一个键为 int 型, 值为 string 型的 map
元素的插入:
kvm[] = "abc"; // 值 "abc" 在 map 中的键值为 1 ------方法1
kvm.insert (map<int, string> :: value_type(, "def")); // 值 "def" 在 map 中的键值为 2 ------方法2
利用 find 查找:
map<int, string> :: iterator it;//定义迭代器
it = kvm.find(); //find 只能根据键查找,且find函数返回的是迭代器.
if (it == kvm.end()) cout << "Not Found" <<endl;
else cout << it->first << " " << it->second << endl; //利用 first 和 second 访问键 和 值.
利用 count 查找:
int cnt = kvm.count(); //count 按照查找的 键 返回找到的个数.由于不重复即只能返回 0 或 1
根据键访问值:
string ss = kvm[] //map 根据要访问的 "键" 返回 "键对应的值", 需要用 find 或者 count 判断 "键" 是否存在
map 的删除:
it = kvm.find();
kvm.erase(it); //利用 find 找到键为 1的位置, 再通过迭代器删除元素 ---------方法1
kvm.erase() //删除键为 1 的元素, 成功返回 ”1“ 否则返回 ”0“ ---------方法2
kvm.erase( kvm.begin(), kvm.end() ); //通过迭代器区间性删除, 区间为前闭后开 ---------方法3
常用操作:
kvm.clear() //清空 map
kvm.empty() //判断 map 是否为空
kvm.size() //返回 map 中元素的个数
其他查找函数:
map<int, string> :: it;
it = lower_bound(key); //返回键值 大于等于 给定键值的第一个位置
it = upper_bound(key); //返回键值 大于 给定键值的第一个位置
结构体类型的构造:
struct NODE{
int x; int y;
bool operator < (const NODE& a) const{
if(x == a.x) return y > a.y;//二级排序为 y 的降序
return x < a.x; //以及排序为 x 的升序
}
};
map<NODE, string> kvm; //必须重载结构体的 “<"
map 的遍历:
map<int, string>::iterator it;
for(it = kvm.begin(); it != kvm.end(); it++) {
cout << it -> first << " " << it -> second << endl;
}
STL容器 -- Map的更多相关文章
- STL容器Map
Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)
- STL - 容器 - Map(二)
把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> ...
- STL - 容器 - Map(一)
MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...
- STL中map与hash_map容器的选择收藏
这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...
- 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 容器
C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...
- 使用C++STL的map容器实现一种命令映射
因为最近在练习写一个ftp的服务器,其中的命令有很多种,每个命令对应一个执行函数,能够想到的最简单的实现方式便是使用if--else匹配命令和执行对应的函数,如下所示: if(strcmp(" ...
- C++STL之map映照容器
map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的, 键值与映照数据之间具有一一映照关系. map映照容器的数据结构也是采用红黑树来实现的, 插入元素的键值不允许重复, 比较函数 ...
随机推荐
- Java中关于Arrays.asList方法的深入学习与理解
Java的标准库中在java.util包下提供了很多实用的工具类,如:Arrays,Collections等工具类都提供了一些比较实用的方法.在实际的开发使用中,我们经常需要使用这样的需求:将一个数组 ...
- 基础知识:BT1120
今天谈点我所理解的BT1120协议. BT1120是高清晰度电视 (HDTV) 演播室信号数字接口,首先说一下接口标准里面的概念,然后谈谈自己的理解,写这个文章的目的就是解释给自己听的,所以都是一些白 ...
- CodeBlocks的常用快捷键
CodeBlocks常用操作快捷键 编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销 Ctrl + S:保存 Ctr ...
- POJ 1556 The Doors 线段交 dijkstra
LINK 题意:在$10*10$的几何平面内,给出n条垂直x轴的线,且在线上开了两个口,起点为$(0, 5)$,终点为$(10, 5)$,问起点到终点不与其他线段相交的情况下的最小距离. 思路:将每个 ...
- POJ 3304 Segments 基础线段交判断
LINK 题意:询问是否存在直线,使得所有线段在其上的投影拥有公共点 思路:如果投影拥有公共区域,那么从投影的公共区域作垂线,显然能够与所有线段相交,那么题目转换为询问是否存在直线与所有线段相交.判断 ...
- 10款好用的 jQuery 图片切换效果插件
jQuery 是一个非常优秀的 Javascript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一些让人惊叹的效 ...
- 旅游(CSUST省赛选拔赛2+状压dp+最短路)
题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ...
- Django中的MiddleWare中间件
1. middleware简介 Django的middleware的概念相当于SSH框架里面的filter的概念.中间键的作用就是对所有的request,在request前,和在response后做一 ...
- npm install ERR! code E400/E404
在安装webpack的过程中,出现了一个报错npm install ERR! code E400/E404 解决方法: 1.查看npm配置文件 是否有错误: 执行 npm config edit 查看 ...
- 使用wifite破解路由器密码
使用wifite破解路由器密码 发表于 2016-02-06 | 分类于 wifite | 暂无评论 | 10次阅读 简介 wifite是一款自动化wep.wpa破解工具,不支持w ...