map是一种容器,用来存储若干元素这些元素都是键值对(key_value)组成。在一个map中,key值通常用来排序或特指元素,映射值用来存储于该key值绑定的内容。key与value类型可以不同。map中的映射值可以用[ ]来直接访问,底层是用二叉搜索树中的红黑树实现的。
在map内部的元素通常按照其key值排序,且排序方式是根据某种明确、严格的弱排序标准进行的,这种排序标准是由map内部的比较对象(仿函数)指定的。map通过key值访问元素的速度,一般较unordered_map慢,但map容器允许基于它们的顺序对子集进行直接迭代。
map的特性
* 关联性
* 有序性
* 映射
* 唯一key值
1.包含头文件
#include <map>
2.map声明及初始化
struct Comp{
bool operator()(const char& a, const char& b){
return a < b;
}
};
void ListTest()
{
map<char, int> first;
first['a'] = 10;
first['b'] = 20;
first['c'] = 30;
map<char, int> second(first.begin(), first.end());
map<char, int> third(first);
map<char, int, Comp> fourth;
fourth['g'] = 9;
fourth['t'] = 0;
fourth['a'] = 6;
map<char, int>fifth;
fifth = first;//重载了等号
}
监视窗口查看结果。
3.map的基本使用
(1)容量(Capacity)
m.empty();//判断map是否为空
m.size();//map中元素个数
m.max_size();//map中可以容纳的最大元素个数
(2)修改(Modifiers)
m.insert();//插入元素
m.erase();//删除元素
m.swap();//交换两个map
m.clear();//清空map
对一些重要的函数使用进行介绍。
insert
insert函数原型:
pair<iterator,bool> insert ( const value_type& x );//直接插入元素
iterator insert ( iterator position, const value_type& x );//指定位置插入
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );//插入指定区间
例子:
void ListTest()
{
map<char, int> m1;
map<char, int>::iterator it;
it = m1.begin();
m1.insert(pair<char,int>('a', 1));
m1.insert(it, pair<char, int>('b', 2));
map<char, int> m2;
m2.insert(m1.begin(), m1.end());
}
监视窗口查看结果。
erase
erase参数原型:
void erase ( iterator position );
size_type erase ( const key_type& x );
void erase ( iterator first, iterator last );
(3)迭代器(Iterators)
m.begin();//开始指针
m.end();//末尾指针
m.rbegin();//反向迭代器的开始指针
m.rend();//反向迭代器的末尾指针
(4)元素访问(Element access)
operator[]
(5)算法(Operations)
m.find(data);//查找元素
m.count();//元素个数
m.lower_bound();//返回key值<给定元素的第一个位置
m.upper_bound();//返回key值>给定元素的第一个位置
m.equal_range();//返回特殊条目的迭代器对
(6)Observers
m.key_comp();//返回比较元素key的函数
m.value_comp();//返回比较元素value的函数
(7)配置器
get_allocator();//返回map的配置器
查看帮助文档进一步学习
set和map的接口是一样的,只不过set中的key即是value,value即是key。