简介:
map
类用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对。 键的值是唯一的,用于自动排序数据。
可以直接更改映射中的元素值。 键值是常量,无法更改。 必须先删除与旧元素关联的键值,才能为新元素插入新键值。
特点:
C++ 标准库 map 类为:
大小可变的关联容器,基于关联键值高效检索元素值。
可逆,因为它提供双向迭代器来访问其元素。
有序,因为它的元素根据指定的比较函数按键值排序。
唯一。 因为它的每个元素必须具有唯一键。
关联容器对,因为它的元素数据值与其键值不同。
类模板,因为它提供的功能是泛型的,独立于元素或键类型。 用于元素和键的数据类型作为类模板以及比较函数和分配器中的参数指定。
1、头文件
#include<map>
2、常用方法
#include<map>
int main(){
//声明
map<int, int> m1;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
//插入:方法
m1.insert(Int_Pair(1, 1));
m1.insert(pair<int, int>(2,2));
//插入:数组
m1[3] = 3;
//迭代器访问
map<int, int>::iterator it = m1.begin();
for( ; it != m1.end(); it++) {
cout << it->first << " ";
cout << it->second << endl;
}
//数组访问 m1[key];
//当key不存在,访问仍成功,用该key构造键值对,取value对象默认构造值,string为构造为空串,int为0
cout << m1[3] << endl;
//删除erase(key),c成功返回1,否则返回0
m1.erase(1);
it = m1.begin();
for( ; it != m1.end(); it++) {
cout << it->first << " ";
cout << it->second << endl;
}
//查找 找到返回迭代器,失败返回 m1.end()
cout << m1.find(2)->second << endl;
//用迭代器,成片的删除
m1.erase( m1.begin(), m1.end() );
//一下代码把整个map清空
m1.clear();
cout << m1.size()<<endl;
//排序:map自动对key升序,value要排序请放到vector中
}
3、Typedef
名称 | 说明 |
---|---|
allocator_type | 映射对象的 allocator 类的 typedef。 |
const_iterator | 可读取 const 中 map 元素的双向迭代器的 typedef。 |
const_pointer | 指向映射中的 const 元素的指针的 typedef。 |
const_reference | 对映射中存储的元素的引用 const 的 typedef,用于读取和执行 const 操作。 |
const_reverse_iterator | 一种类型,此类型提供可读取 const 中的任何 map 元素的双向迭代器。 |
difference_type | 映射中迭代器指向的元素间范围内元素数量的有符号整数 typedef。 |
iterator | 可读取或修改映射中任何元素的双向迭代器的 typedef。 |
key_compare | 可比较两个排序键以确定 map 中两个元素的相对顺序的函数对象的 typedef。 |
key_type | 存储在映射内每个元素中的排序键的 typedef。 |
mapped_type | 存储在映射内每个元素中的数据的 typedef。 |
pointer | 指向映射中的 const 元素的指针的 typedef。 |
reference | 对映射中存储的元素的引用的 typedef。 |
reverse_iterator | 可读取或修改反向映射中的元素的双向迭代器的 typedef。 |
size_type | 映射中元素数量的无符号整数 typedef。 |
value_type | 作为元素存储在映射中的对象类型的 typedef。 |
4、成员函数
成员函数 | 说明 |
---|---|
at | 查找具有指定键值的元素。 |
begin | 返回一个迭代器,此迭代器指向 map 中的第一个元素。 |
cbegin | 返回指向中第一个元素的 map 常数迭代器。 |
cend | 返回一个超过末尾常量迭代器。 |
clear | 清除 map 的所有元素。 |
containsC++20 | 检查是否存在具有指定键的 map 元素。 |
count | 返回映射中其键与参数中指定的键匹配的元素数量。 |
crbegin | 返回一个常数迭代器,该迭代器指向反向 map 的第一个元素。 |
crend | 返回一个常数迭代器,该迭代器指向反向 map 最后一个元素之后的位置。 |
emplace | 将构造的元素插入到该元素中 map 。 |
emplace_hint | 使用放置提示将构造的元素插入到该 map 元素中。 |
empty | 如果为空,map 则返回true 。 |
end | 返回超过末尾迭代器。 |
equal_range | 返回一对迭代器。 此迭代器对中的第一个迭代器指向 map 中其键大于指定键的第一个元素。 此迭代器对中的第二个迭代器指向 map 中其键等于或大于指定键的第一个元素。 |
erase | 从指定位置移除映射中的元素或元素范围。 |
find | 返回一个迭代器,该迭代器指向键等于指定键的元素的位置 map 。 |
get_allocator | 返回用于构造 allocator 的 map 对象的副本。 |
insert | 将一个或一系列元素插入到 map 中的指定位置。 |
key_comp | 返回用于对键进行排序的 map 比较对象的副本。 |
lower_bound | 返回一个迭代器,该迭代器指向具有键值等于或大于指定键的值的第一个元素 map 。 |
max_size | 返回 map 的最大长度。 |
rbegin | 返回一个迭代器,此迭代器指向反向 map 中的第一个元素。 |
rend | 返回一个迭代器,该迭代器指向反向 map 中最后一个元素之后的位置。 |
size | 返回 map 中的元素数量。 |
swap | 交换两个映射的元素。 |
upper_bound | 返回一个迭代器,该迭代器指向具有大于指定键的键值的第一个元素 map 。 |
value_comp | 检索用于对 map 中的元素值进行排序的比较对象副本。 |
5、运算符
名称 | 说明 |
---|---|
operator[] | 将元素插入到具有指定键值的映射。 |
operator= | 将一个映射中的元素替换为另一映射副本。 |