map容器和multimap容器
一、基本概念
头文件:
#include <map>
简介:
●map中所有元素都是pair
●pair中第-个元素为key (键值),起到索引作用,第二个元素为value (实值)
●所有元素都会根据元素的键值自动排序
本质:
●map和multimap属于关联式容器, 底层结构是用二叉树实现。
优点:
●可以根据key值快速找到value值
map和multimap区别:
●map不允许容器中有重复key值元素
●multimap允许容器中有重 复key值元素
二、map容器
1、构造和赋值
构造:
●map<T> m;
//默认构造函数:
●map(const map & m);
//拷贝构造函数
赋值:
●map& operator=(const map & m);
//重载等号操作符
2、大小和交换
函数原型:
●size();
//返回容器中元素的数目
●empty();
//判断容器是否为空
●swap(m);
//交换两个集合容器
3、插入和删除
函数原型:
●insert(elem);
//在容器中插入元素。
map<int, int> m;
//第一种插入方式
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(2, 30));
m.insert(pair<int, int>(4, 10));
//第二种插入方式
m.insert(make_pair(5, 40));
m.insert(make_pair(3, 30));
//第三种插入方式
m.insert(map<int, int>::value_type(6, 70));
//第四种插入方式
m[7] = 60;
●clear();
//清除所有元素
●erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。
●erase(beg, end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
●erase(key);
//删除容器中值为key值的元素。(删除key值的pair数据)
4、查找和统计
函数原型:
●find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器:若不存在,返回map.end);
●count(key);
//统计key的元素个数(对于map是为1)
5、排序规则
map容器默认排序规则为从小到大
主要技术点:
●利用仿函数,可以改变排序规则
类型为类map<类型, 类型, 仿函数类型> m;
#include <iostream>
using namespace std;
#include <map>
class myCompare
{
public:
bool operator()(int v1, int v2) const
{
return v1 < v2;
}
};
int main()
{
map<int, int, myCompare> m;
m.insert(make_pair(1, 10));
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
m.insert(make_pair(4, 40));
m.insert(make_pair(5, 50));
m.insert(make_pair(6, 60));
map<int, int, myCompare>::const_iterator it = m.begin();
for (it; it != m.end(); it++)
{
cout << "key = " << (*it).first << " value = " << it->second << endl;
}
return 0;
}