map——常用STL容器,可将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器),用于散列表法。
map使用时要加上:#include<map>;using namespace std。
map的定义:
map<typename1,typename2> mp; typename1: 键key的类型;typename2: 值value的类型;
如果是字符串到整型的映射,必须使用string不能使用char数组;
使用map将一个set容器映射到一个字符串:map<set<int>, string> mp;
map容器内元素的访问:
1.通过下标访问 2.通过迭代器访问
1.通过下标访问
2.通过迭代器访问
迭代器的定义:1. map<typename1, typename2>::iterator it;
2. auto it;
使用迭代器it同时访问键和值:map使用it->first访问键,使用it->second访问值;
map会以键从小到大顺序自动排序,因为map内部是使用红黑树实现的,会在建立映射的过程中自动实现从小到大的排序功能,set也是如此。只需处理映射不按键排序,可使用unordered_map,其内部以散列代替红黑树实现,unordered_map速度比map快得多。
3.使用pair进行访问
使用迭代器访问,访问第一个元素:it -> first
使用pair<string,int> p来访问,访问第一个元素:p.first
一个是箭头,一个是点哈~
map容器添加元素:
1.通过数组下标
m["string"]=19;
2.用insert插入pair元素
mp.insert(pair<string,int>("heihei",5));
//或:
mp.insert(make_pair("heihei",5));
map常用函数:
(1) find()
mp.find(key)返回键为key的映射的迭代器
(2) erase()
1.删除单个元素:mp.erase(it)或mp.erase(key);
2.删除一个区间内元素:mp.erase(first, last); first: 需删除区间的起始迭代器,last: 需删除区间末尾迭代器的下一个地址。删除区间为: [first, last)。
(3) size()
返回map中映射的对数
(4) clear()
清空map中所有元素
begin() 返回指向map头部的迭代器
end() 返回指向map末尾的迭代器
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
mp.begin() 为指向mp中第一个元素的迭代器;mp.end()指向mp中最后一个元素下一个地址;
map的遍历:
1. 使用迭代器进行遍历
// 方式一、迭代器
cout << "方式一、迭代器" << endl;
for (auto it = mp.begin(); it != mp.end(); it++) {
cout << it -> first << " " << it -> second << endl;
}
2.
// 方式二、range for C++ 11版本及以上
cout << "\n方法二、 range for" << endl;
for (auto& it : mp) {
cout << it.first << " " << it.second << endl;
}
3.
// 方法三、 C++ 17版本及以上
cout << "\n方法三" << endl;
for (auto& [key, val] : mp) {
cout << key << " " << val << endl;
}
map常用用途:
(1)建立字符串和整数的映射
(2)判断大整数或其他类型数据是否存在,将map当bool数组使用
(3)建立字符串与字符串之间的映射