工作中用到了map,做个简单的小结
1.map介绍
在c++中map是一种键值对容器,有几个特点
- map提供一对一的键值对操作,以<key,value>的形式出现,,其中key是唯一的,key和value可以是任意类型,包括自定义类型
- map的内部为一棵红黑树,默认会对key从大到小进行排序操作
2.map的使用
1.头文件
#include <map>
2.map的初始化
map对象是一个模板类,需要key,value两个关键字
map<std::string,char> map1
map<std::string,char> map2(map1)
map<std::string,char> map3(map1.begin(),map1.end());
需要注意的点:在map中直接使用char*
作为key,在后面使用key做find操作时,会找不到之前插入的元素,原因是做find操作时,使用“==”进行判断,但是char*只是一个指针,两次比较的地址值不一样,会导致找不到插入的元素
3.元素插入
map<int,std::string> Mymap;
//1.使用数组方式插入
map[1] = "first";
map[2] = "second";
//2.insert插入pair数据
Mymap.insert(pair<int,std::string>(3,"third"));
//3.insert 函数插入 value_type 数据
Mymap.insert(map<int,std::string>::value_type(4,"four"));
4.元素遍历
- 数组方式
using namespace std;
map<int,string> Mymap;
//方法一.数组方式遍历
int size = Mymap.size();
for(int i = 0;i < size;i++){
cout << Mymap[i]<<endl;
}
//方法二.前向迭代器
for (auto it = Mymap.begin(); it != Mymap.end(); it++) { cout << it -> first << " " << it -> second << endl; }
//方法三.反向迭代器
std::map < int, string > ::reverse_iterator iter; for(iter = Mymap.rbegin(); iter != mapPerson.rend(); iter++) cout<<iter->first<<" "<<iter->second<<endl;
//方法四:c++11 版本及以上
for(auto it:Mymap) {
cout << it.first << " " << it.second << endl;
}
//方法五:c++17 版本及以上
for (auto [key, val] : Mymap) {
cout << key << " " << val << endl;
}
5.元素查找
find(key): 返回值是key的映射的迭代器,如果没有,返回的迭代器和end函数的值相同
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mp.find("1");
if(iter != mp.end()){
cout<<"the value is"<<iter->second<<endl;
}
else{
cout<<"can not find "<<endl;
}
6.删除和清空元素
//1.iterator erase(iterator it) ;//通过一个条目对象删除
iter = mp.find("1");
mp.erase(iter);
//2.iterator erase(iterator first,iterator last); //删除一个范围
mp.erase(mp.begin(), mp.end())//清空map
//3.size_type erase(const Key&key); //通过关键字删除
int ret = mp.erase("1"); //刪除了会返回1,否则返回0
//4.清空map
mp.clear();//mp.erase(mp.begin(),mp.end());
7.map的大小
int len = mp.size();
8.其他基本函数
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的函数