参考博客
https://blog.youkuaiyun.com/sevenjoin/article/details/81943864
https://blog.youkuaiyun.com/yanying1113/article/details/98957833
知识点
1、红黑树实现
2、时间复杂度,插入:O(logN),查找:O(logN),删除:O(logN)
3、key值唯一不可重复
4、插入自动建立key、value对应并排序
使用
1、构造,声明模板类参数类型
map<int, string> map_;
2、插入
insert方法,重复key值插入不会覆盖
map_.insert(pair<int, string>(4, "ddddddd"));
下标,重复key值插入会覆盖,用下标访问map中不存在的元素时,将导致向map中添加该下标所指向的新元素,其值会根据类型默认值或默认构造函数进行初始化。
map_[4] = "4444444";
3、删除
iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last);//删除范围[first, last)内对象
size_type erase(const Key& key); //通过关键字删除
map的清空函数clear()就相当于 Map.erase(Map.begin(), Map.end());
4、遍历
for (map<int, string>::iterator iter = map_.begin(); iter != map_.end(); iter ++) {
cout << iter->first << " " << iter->second << endl;
}
其中,begin指向第一个元素,end指向末尾(但不是最后一个元素)
// begin指向第一个元素,end指向末尾(但不是最后一个元素)
cout << "rbegin: " << map_.rbegin()->first << " " << map_.rbegin()->second << endl;
//cout << "rend" << map_.rend()->first << " " << map_.rend()->second << endl;
cout << "begin: " << map_.begin()->first << " " << map_.begin()->second << endl;
//cout << "end" << map_.end()->first << " " << map_.end()->second << endl;
cout << "--end: " << (--map_.end())->first << " " << (--map_.end())->second << endl;
4、统计
size方法
cout << map_.size() << endl;
count方法,返回map中k出现的次数,为0当然就表示不存在,因为k是唯一,只能用来判断k是否存在。
cout << map_.count(1) << endl;
5、查找,若查找不到这返回end(),所以使用前要判断
map<int, string>::iterator it = map_.find(1);
if (it != map_.end()) {
cout << it->second << endl;
}
6、其他方法
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的函数