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 交换两个向量的元素。
时间: 2024-10-14 23:47:29

C++关联容器<map>简单总结的相关文章

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

STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可反复,即一个 key 仅仅能相应一个 value, 相应头文件<map> multimap 键值对 key-value 存储,key 能够反复,即一个 key 能够相应多个 value, 相应头文件<map> set 仅仅有 key, key 不可反复,相应头文件<set>

关联容器——map、set

map类型通常被称为关联数组,与正常数组类似,不同之处在于其下标不必是整数.我们通过一个关键字而不是位置来查找值(键值对). 与之相对,set就是关键字的简单集合.当只是想知道一个值是否存在时,set是最有用的. 类似顺序容器,关联容器也是模板,为了定义一个map,我们必须指定关键字和值得类型.例:map<string,int>test;一个test的空map,关键字是string.值是int的.set<string> e={"hello"};设置关键字集合,类

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

STL 关联容器简介 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素.在 STL 中,有四种关联容器,分别是: map 键值对 key-value 存储,key 不可重复,即一个 key 只能对应一个 value, 对应头文件<map> multimap 键值对 key-value 存储,key 可以重复,即一个 key 可以对应多个 value, 对应头文件<map> set 只有 key, key 不可重复,对应头文件<set> mult

关联容器map的使用

map容器中的元素是一些关键字-值(key-value)对.map全称为有序的关键字不可重复的map,可以称之为关联数组,map通过关键字而非位置来查找值. 出了map外,还有允许关键字重复的multimap.无序的(由哈希函数组织的)关键字不可重复出现的unordered_map和无序的关键字可重复出现的unordered_multimap. 1 map的定义和初始化 在定义和初始化上,map和顺序容器vector并没有很大区别,甚至大多数初始化方式是一样的. 2 赋值 map的赋值可以有同类

关联容器map, multimap

map/multimap里放着的都是pair模板类的对象,且按first从小到大排序. pair 模板: template <class _T1, class _T2> struct pair { typedef _T1 first_type; typedef _T2 second_type; _T1 first; _T2 second; pair():first(),second(){}; pair(const _T1 &__a, const _T2 & __b):first

关联容器map(红黑树,key/value)

字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s="a1a2···an"(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数值的一个连续序列,字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s="abcdefghij",则s[1]="a",s[10]="j" //线性序列,里面只存了一个元素,map存的是键值对 vector  [2

【足迹C++primer】36、使用关联容器

使用关联容器 两个主要的关联容器map和set 8个容器:(1)或者是一个set一个map:(2)或者要求不重复的关键字,或者允许重复关键字: (3)按顺序保存元素,或无序保存.允许重复关键字的容器的名字中都包含单词multi:不 保持关键字按顺序存储的容器的名字都以单词unordered开头. map类型常常被叫成关联容器,这个是关键字查找 set就是全由关键字组成 这次写博客的时候有点晚,早上有考试,没办法,不然挂了那就 咳咳,还有现在我发现一个写好博客的好方法了,我不在边写博客边看书了,感

C++拾遗(七)——关联容器

关联容器(Associative containers)支持通过键来高效地查找和读取元素.两个基本的关联容器类型是 map 和set.map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据.set仅包含一个键,并有效地支持关于某个键是否存在的查询.set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素.如果一个键必须对应多个实例,则需使用 multimap 或 multiset,这两种类型允许多个元

CH11 关联容器

关联容器与顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器是按它们在容器中的位置来顺序保存和访问的.两个主要的关联容器:map和set map 中的元素的是一个key-value对:关键字是用来索引值关联的数据.set:每个关键字值包含一个关键字. 关联容器类型: map 保存key-value  map<key,value> set 保存关键字key set<key> multimap 关键字可以重复出现的map multiset 关键字可以重复出现的