一、map基本概念
map中所有元素都是pair,palir中第一个元素为key (键值),起到索引作用,第二个元素为value(实值)。所有元素都会根据元素的键值自动排序。
map/multimap属于关联式容器,底层结构是用二叉树实现。可以根据key值快速找到value值。
map不允许容器中有重复key值元素,multimap允许容器中有重复key值元素。
二、构造和赋值操作
构造:
map<T1,T2> mp; map默认构造函数
map(const map &mp ); 拷贝构造函数
赋值:
map& operator=( const map &mp); 重载等号操作符
map<int, int> m;
//利用对组来讲key值与value值插入到容器中
m.insert(pair<int, int>(1, 10));
m.insert(make_pair(2, 20));
m.insert(map<int, int>::value_type(3, 30));
m.insert(pair<int, int>(4, 40));
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << (*it).first << (*it).second << endl;
}
三、大小和交换
size(); 返回容器中元素的数目
empty(); 判断容器是否为空
swap(st);交换两个集合容器
四、插入和删除
insert(elem); 插入元素
几种方式样例如下:
//第一种
m.insert(pair<int, int>(1, 10));
//第二种
m.insert(make_pair(2, 20));
//第三种
m.insert(map<int, int>::value_type(3, 30));
//第四种,不建议使用这种方法插入,如果一旦差错位置或者key不存在的位置,则会产生问题。但是可以使用这种方式可以通过key访问value
m[4] = 30;
clear(); 清空元素
erase(pos); 删除pos迭代器所指的元索,返回下一个元素的迭代器。
erase(beg,end);删除区间[beg,end)的所有元素,返回下一个元素的迭代器。
erase(key);删除容器中值为key的元素。
五、查找和统计
find(key); 查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();。
count(key); 统计key的元素个数。
六、排序操作
map容器默认排序规则为按照key值进行从小到大排序。我们可以利用仿函数来改变排序规则。
class MyCompare
{
public:
bool operator()(int s1, int s2)
{
return s1 > s2;
}
};
void test08()
{
map<int, int, MyCompare> m;
//利用对组来讲key值与value值插入到容器中
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++)
{
cout << (*it).first <<" "<< (*it).second << endl;
}
}