Map 使用帮助:
(一)常用函数:包含#include<map>
- begin() 返回指向map头部的迭代器
- clear() 删除所有元素
- count() 返回指定元素出现的次数
- empty() 如果map为空则返回true
- end() 返回指向map末尾的迭代器
- equal_range() 返回特殊条目的迭代器对
- erase() 删除一个元素
- find() 查找一个元素
- get_allocator() 返回map的配置器
- insert() 插入元素
- key_comp() 返回比较元素key的函数
- lower_bound() 返回键值>=给定元素的第一个位置
- max_size() 返回可以容纳的最大元素个数
- rbegin() 返回一个指向map尾部的逆向迭代器
- rend() 返回一个指向map头部的逆向迭代器
- size() 返回map中元素的个数
- swap() 交换两个map
- upper_bound() 返回键值>给定元素的第一个位置
- value_comp() 返回比较元素value的函数
重点使用函数说明:
- 1.map的插入:
map<int,string>map1;
(1)map1.insert(pair<int,string>(1,"aaa"));
(2)map1.insert(map<int,string>::value_type(2,"bbb"));
(3)map1[3]="ccc";
- 2.map的删除:
map使用find()查找,使用迭代器接收查找返回的值,若未找到返回尾部迭代器,若找到使用erase()
(1)map1.erase(iter);
- 3.map的修改
(1)map1[1]="ddd";
若没有此key,则新插入此键值对
- 4.map的查找:
map自身查找使用find(),通过该函数返回一个key,如果没找到就返回指向map尾部的迭代器
iter = map1.find(key);
If(iter != map1.end()) //找到
- 5.map的sort问题:
map中的元素是自动按key升序排序,所以不能对map用sort函数
(二)常用函数代码实现:
#include <map>
#include <iostream>
using namespace std;
int main()
{
//map定义
map<int, string> map1;
//使用[]赋值
map1[0] = "a";
map1[1] = "b";
map1[2] = "c";
//使用迭代器遍历
map<int, string>::iterator iter;
for (iter = map1.begin(); iter != map1.end(); ++iter)
{
cout << iter->first << " : " << iter->second << endl;
}
//map元素个数
cout <<map1.size() << endl;
//修改映射值,注:使用[]修改值,如果没有此key,则插入键值对
map1[0] = "ccc";
map1[4] = "ddd";
//插入键值对<5, "eee">
map1.insert(pair<int,string>(5, "eee"));
cout << "5: " << map1.find(5)->second << endl;
//插入键值对<6, "kkk">
map1.insert(map<int,string>::value_type(6, "kkk"));
cout << "6: " << map1.find(6)->second << endl;
//操作易错点:若插入已存在的键,则此键对应的值不变,且编译器不会报错
map1.insert(pair<int,string>(2, "eee"));
cout << "2: " << map1.find(2)->second << endl;
//删除键为1的键值对
iter = map1.find(1);
if (iter != map1.end())
{
map1.erase(iter);
}
//使用函数清空map
while (!map1.empty())
{
map1.erase(map1.begin());
}
return 0;
}
(三)Map 文字补充说明:
map 容器中存储了若干键值对,这些键值对都是由关键值 (Key Value) 和映射值 (Mapped Value) 配对组成的,具体说明如下:
- 在一个 map 中, Key 值通常用来排序或特指元素,映射值用来存储与该 Key 值绑定的内容。 Key 值与映射值的数据类型可以不同,而且可以一起被放进成员类型 value_type 中,value_type 是一种配对类型,定义如下:
typedef pair<const Key, T> value_type;
- 在 map 内部的元素通常按照其 Key 值排序,且排序方式是根据某种明确、严格的弱排序标准进行的,这种排序标准是由 map 内部的比较对象(即 map::key_comp)指定的。
- map 容器通过 Key 值访问特定元素的速度,相较于 unordered_map 容器通常较慢,但 map 容器允许基于它们的顺序对子集进行直接迭代。
- map 中的映射值可以使用括号运算符 (operator[]) 通过其关联的 Key 值直接访问。
- map 通常使用二叉搜索树实现。
(四)map 容器属性:
- 关联性: 关联容器中的元素的参考地址指的是其 Key 值,而不是他们在容器中的绝对地址;
- 有序性: 容器中的元素一直按照排序方式严格排序,所有插入元素都按照该顺序排列;
- 映射: 每个元素中,一个 Key 值与一个映射值相关。Key 值是用来标识其主要内容是映射值的元素;
- 唯一 Key 值: 容器中不存在同时拥有相同 Key 值的两个元素;
- 分配感知 (Allocator-aware): map 容器使用分配器对象动态处理其存储需求。
注:文章为综合总结,只为给自己提供编程时可用的工具书