简介:
本质:
优点:
map和multimap区别:
函数原型
构造:
map mp;
//默认构造map(const map &mp);
//拷贝构造赋值:
=
//重载等号操作符函数原型
.size();
//返回容器中元素的数目.empty();
//判断容器是否为空.swap(mp);
//交换两个map容器函数原型
插入:
.insert(pair(key,value));
//插入.insert(make_pair(key,value))
//插入mp[key]=value
//向容器mp中插入删除:
.clear();
//清除所有元素.erase(pos);
//删除指定pos位置的元素,返回下一个元素的迭代器.erase(beg,end);
//删除区间【beg,end)中的数据,返回下一个元素的迭代器.erase(key);
//删除值为key的元素示例
mapm;
//1、第一种插入
m.insert(pair(1, 10));
//2、第二种插入
m.insert(make_pair(2, 20));
//3、第三种插入,不建议,过于强大,就算没有value值也能生成m[key]
m[3] = 30;
//删除
m.erase(m.begin());//删除指定位置的元素,这里删除第一个键值对
m.erase(2); //按照key值删除,这里删除key值为2的键值对
m.erase(m.begin(), m.end());
m.clear();
注意: map不允许插入同样的key值,只保留第一次输入该key时对应的键值对
函数原型
.find(key);
//查找key值是否存在,若存在,返回该值的元素的迭代器;若不存在,返回.end().count(key);
//统计key的元素个数,map容器结果只有0或1,multimap可以有不同的值示例
mapm;
//插入
m.insert(pair(1, 10));
m.insert(make_pair(2, 20));
m[3] = 30;
//查找
map::iterator pos = m.find(3);
if (pos != m.end()) {
cout << "查到了元素key=" << (*pos).first<< " value=" << pos->second << endl;
}
else {
cout << "未找到元素" << endl;
}
//统计
int num = m.count(3);
cout << "num=" << num << endl;
map容器默认排序规则为从小到大,可以利用仿函数来改变排序规则
示例
//仿函数,指定排序规则为从大到小
class MapCompare {
public:
bool operator()(int v1, int v2) const{
//降序
return v1 > v2;
}
};
mapm; //传入自定义的仿函数,实现自定义排序
m.insert(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[6] = 60;
for (map::iterator it = m.begin(); it != m.end(); it++) {
cout << "key=" << it->first << " value=" << it->second << endl;
}
注意