C++关联容器<map>简单总结
C++关联容器<map>简单总结
map提供大小可变的关联容器,基于关联键值高效检索元素值。当你处理键值对的数据是,都可以考虑使用map关联容器。
特点:
大小可变的关联容器,基于关联键值高效检索元素值。
可逆,因为它提供双向迭代器来访问其元素。
有序,因为它的元素根据指定的比较函数按键值排序。
唯一。 因为它的每个元素必须具有唯一键。
关联容器对,因为它的元素数据值与其键值不同。
模板类,因为它提供的功能是一般性的功能,与元素或键类型无关。 用于元素和键的数据类型作为类模板以及比较函数和分配器中的参数指定。
头文件:#include <map>
命名空间:using namespace std:map;
构造函数:
map<key_type, value_type>map_show // key_type表示键类型,value_type表示值类型,如:map<string, int>map_show;表示以字符串为键,整形位置的关联map
map<int, int>map_int; // 类似数组
map<string, int>map_str; // 类似以字符串为下标的数组
基本维护操作
1.访问
下标访问"[]" 和at()方法两种方式,推荐第二种方法,它会进行边界检查。
对于map<string, int>map_str;其访问方式为:
map_str["firstel"];或者map_str.at("firstel"); // 返回键值firstel对应的值
int size( ) const; // 返回映射中的元素数量。
bool empty( ) const; // 判断映射是否为空,true表示为空,false表示为非空
iterator find(const Key& key); // 返回映射中具有与指定键等效的键对应元素位置的迭代器。
注意:count方法:map_str.count("first") // 返回 map 中其键与指定了参数的键匹配的元素数量。如果 map 包含其排序键与参数键匹配的元素,则返回 1;如果 map 不包含带有匹配键的元素,则返回 0。
2.添加
对于map<string, int>map_str,有以下几种插入方式:
map_str.insert(make_pair("key", 23)); // 将键值对{"key", 23}插入到映射中
map_str.insert({"key", 23}); // 将键值对{"key", 23}插入到映射中
map_str.insert(map_str.begin()+2, make_pair("key", 23)); // 在第二个位置插入{"key", 23}键值对
3.删除
iterator erase(const_iterator Where); // 移除Where迭代器位置的键值对
int erase(const key_type& key); // 移除键值和key相等的位置的键值对
iterator erase( const_iterator First, const_iterator Last ); // 移除First和Last迭代器之间的键值对
void clear(); // 清除映射内的所有键值对元素
4.遍历
使用迭代器进行遍历,非常方便。
iterator begin( ); // 返回指向映射中第一个元素的迭代器
iterator end( ); // 返回指向映射中最后一个元素的迭代器
for (map<string, int>::iterator map_it = map_str.begin(); map_it != map_str.end(); map_it++)
{
cout << "key: " << map_it->first << "value: " << map_it->second;
// map_it->first表示键值对的第一个值,也就是键的值,map_it->second表示键值对的第二个值,也就是键对应的值
}
成员函数
|
at
|
查找具有指定键值的元素。 |
| begin | 返回一个迭代器,此迭代器指向映射中的第一个元素。 |
| cbegin | 返回一个常量迭代器,此迭代器指向映射中的第一个元素。 |
| cend | 返回一个超过末尾常量迭代器。 |
| clear | 清除映射的所有元素。 |
| count | 返回映射中其键与参数中指定的键匹配的元素数量。 |
| crbegin | 返回一个常量迭代器,此迭代器指向反向映射中的第一个元素。 |
| crend | 返回一个常量迭代器,此迭代器指向反向映射中最后一个元素之后的位置。 |
| emplace | 将就地构造的元素插入到映射。 |
| emplace_hint | 将就地构造的元素插入到映射,附带位置提示。 |
| empty | 如果映射为空,则返回 true。 |
| end | 返回超过末尾迭代器。 |
| equal_range | 返回一对迭代器。 此迭代器对中的第一个迭代器指向 map 中其键大于指定键的第一个元素。 此迭代器对中的第二个迭代器指向 map 中其键等于或大于指定键的第一个元素。 |
| erase | 从指定位置移除映射中的元素或元素范围。 |
| find | 返回一个迭代器,此迭代器指向映射中其键与指定键相等的元素的位置。 |
| get_allocator | 返回用于构造映射的 allocator 对象的副本。 |
| insert | 将元素或元素范围插入到映射中的指定位置。 |
| key_comp | 返回用于对映射中的键进行排序的比较对象副本。 |
| lower_bound | 返回一个迭代器,此迭代器指向映射中其键值等于或大于指定键的键值的第一个元素。 |
| max_size | 返回映射的最大长度。 |
| rbegin | 返回一个迭代器,此迭代器指向反向映射中的第一个元素。 |
| rend | 返回一个迭代器,此迭代器指向反向映射中最后一个元素之后的位置。 |
| size | 返回映射中的元素数量。 |
| swap | 交换两个映射的元素。 |
| upper_bound | 返回一个迭代器,此迭代器指向映射中其键值大于指定键的键值的第一个元素。 |
| value_comp | 检索用于对映射中的元素值进行排序的比较对象副本。 |
| shrink_to_fit | 放弃额外容量。 |
| size | 返回vector元素个数 |
| swap | 交换两个向量的元素。 |
C++关联容器<map>简单总结的更多相关文章
- c++中关联容器map的使用
C++关联容器<map>简单总结(转) 补充: 使用count,返回的是被查找元素的个数.如果有,返回1:否则,返回0.注意,map中不存在相同元素,所以返回值只能是1或0. 使用find ...
- 关联容器——map、set
map类型通常被称为关联数组,与正常数组类似,不同之处在于其下标不必是整数.我们通过一个关键字而不是位置来查找值(键值对). 与之相对,set就是关键字的简单集合.当只是想知道一个值是否存在时,set ...
- STL 笔记(二) 关联容器 map、set、multimap 和 multimap
STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可 ...
- C++ 之关联容器 map
标准库定义了四种关联容器:map是其中之一(另外还有set.multimap.multiset).map的元素以键-值(key-value),在学了顺序容器之后,再学习关联容器,就比较比较好理解了. ...
- 关联容器(map):支持高效查找的容器,一种键值对的集合。
#include <iostream> #include <string> #include <map> #include <vector> using ...
- 统计数字(关联容器map)
题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统 ...
- 关联容器map(红黑树,key/value),以及所有的STL容器详解
字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s=“a1a2···an”(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数 ...
- C++ 关联容器
<C++ Primer 4th>读书笔记 关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. 关联容器(Ass ...
- c++基础(五)——关联容器
1.关联容器 关联容器中的元素时按照关键字来保存和访问的,与之相对的,顺序容器中的元素时按它们在容器中的位置来顺序保存和访问的.两个主要关联容器是 map 和 set.标准库提供了8个关联容器,这8个 ...
随机推荐
- c++内存管理错误记录
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer( const void * pUserData ){ if (!pUse ...
- asp.net webform 局部发布更新
一:关于webform编译 编译时会将每个aspx文件单独生成dll文件于bin目录下.也会将引用的dll存放于bin目录 二:对界面或者引用的dll(如BLL层,DAL层等)做了修改更新后在服务器只 ...
- python3和Python2的区别(被坑太久了)
print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...
- 如何在一台机子上启动两个TOMCAT
同时启动两个tomcat设置,具体如下: 1.不要设置CATALINA_HOME 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口为不同的端口,将8080 ...
- 常用的JQuery UI框架
http://www.ligerui.com/ http://www.jeasyui.com/index.php http://www.jqwidgets.com/
- Cracking the coding interview--Q2.4
Write code to partition a linked list around a value x, such that all nodes less than xcome before a ...
- keil优化等级设置
附表:Keil C51中的优化级别及优化作用 级别说明 0 常数合并:编译器预先计算结果,尽可能用常数代替表达式.包括运行地址计算. 优化简单访问:编译器优化访问8051系统的内部数据和位地址. 跳转 ...
- Matlab:回归分析(2)
方法一:直接用多元二项式回归 %数据输入 x1 = [ ]; x2 = [ ]; %多元二项式回归函数 y = [ ]; X = [x1' x2']; Y = y'; rstool(X, Y, 'pu ...
- escape encodeURI encodeURIComponent区别
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串.使用unescape来解码. 有效的URI(统一资源标示符)是不能包含某些字符的,如空格,所以需要进行编码,编码方法有 ...
- cocoa Touch-UIKit
1. 简介: UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面( UI )接口.应用程序对象.事件控制.绘图模型.窗口.视图和用于控制触摸屏等的接口. (P ...