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>简单总结的更多相关文章

  1. c++中关联容器map的使用

    C++关联容器<map>简单总结(转) 补充: 使用count,返回的是被查找元素的个数.如果有,返回1:否则,返回0.注意,map中不存在相同元素,所以返回值只能是1或0. 使用find ...

  2. 关联容器——map、set

    map类型通常被称为关联数组,与正常数组类似,不同之处在于其下标不必是整数.我们通过一个关键字而不是位置来查找值(键值对). 与之相对,set就是关键字的简单集合.当只是想知道一个值是否存在时,set ...

  3. STL 笔记(二) 关联容器 map、set、multimap 和 multimap

    STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可 ...

  4. C++ 之关联容器 map

    标准库定义了四种关联容器:map是其中之一(另外还有set.multimap.multiset).map的元素以键-值(key-value),在学了顺序容器之后,再学习关联容器,就比较比较好理解了. ...

  5. 关联容器(map):支持高效查找的容器,一种键值对的集合。

    #include <iostream> #include <string> #include <map> #include <vector> using ...

  6. 统计数字(关联容器map)

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统 ...

  7. 关联容器map(红黑树,key/value),以及所有的STL容器详解

    字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s=“a1a2···an”(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数 ...

  8. C++ 关联容器

    <C++ Primer 4th>读书笔记 关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. 关联容器(Ass ...

  9. c++基础(五)——关联容器

    1.关联容器 关联容器中的元素时按照关键字来保存和访问的,与之相对的,顺序容器中的元素时按它们在容器中的位置来顺序保存和访问的.两个主要关联容器是 map 和 set.标准库提供了8个关联容器,这8个 ...

随机推荐

  1. Spring4.0学习笔记(10) —— Spring AOP

    个人理解: Spring AOP 与Struts 的 Interceptor 拦截器 有着一样的实现原理,即通过动态代理的方式,将目标对象与执行对象结合起来,降低代码之间的耦合度,主要运用了Proxy ...

  2. display 属性

    这里向大家描述一下HTML DOM display属性的定义和用法,HTML DOM display属性主要用来设置元素如何显示,比如当此属性值为none时,表示此元素不会被显示,而block则表示此 ...

  3. iOS证书快要过期怎么办?

    说法一: 1.先revoke你的Certificate,重新生成一个新的. 2.Edit一下你的证书,选择新的Certificate. 3.下载覆盖之前的证书,就可以了. 这个帐号发布的产品不会受到影 ...

  4. 启动weblogic11g一直提示<141281> <unable to get file lock, will retry ...>

    一次非正常关闭weblogic之后,再次启动时启动不成功,一直提示:<141281> <unable to get file lock, will retry ...> 解决方 ...

  5. IT的发展路径

    1.掌握更多的技能 2.掌握某一门深入的技能 3.掌握更多的工具 4.掌握业务

  6. -_-#【Canvas】measureText, translate, drawImage

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. POJ Stockbroker Grapevine 1125 多源最短路(Floyd)

    题目大意: 股票经纪人要散播股票的谣言,每个人都有人际关系,每个人只信任他相信的人传播的谣言, 其实也就是有向图.问 哪个人能最快的将谣言传播给所有人,并且求出传过去的最短时间. 题目分析: 我们用F ...

  8. 【转】android蓝牙开发---与蓝牙模块进行通信--不错

    原文网址:http://www.cnblogs.com/wenjiang/p/3200138.html 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利, ...

  9. 4. c++ 静态 对象

    参考自文章:http://blog.csdn.net/wpf_ml/article/details/7763534 1. 静态存储 变量定义在函数外或是用static 关键字修饰的变量存放在静态存储区 ...

  10. C++編程札記「基礎」

    一直以為自己最擅長的編程語言是C++,那時自己的水平停留在使用C++來實現數據結構中的各種ADT和ACM算法. 創建一個類,必須實現的成員函數 explicit構造函數 對於單參數構造函數,添加exp ...