黑马C++视频笔记《STL之map/multimap》
2021-01-24 本文已影响0人
井底蛙蛙呱呱呱
/* map/multimap容器
* map/multimap属于关联式容器,底层结构是用二叉树实现。
* - map中所有元素都是pair;
* - pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值);
* - 所有元素都会根据元素的键值自动排序;
*
* 优点:可以根据key值(键)快速找到value值.
*
* map和multimap的区别:
* - map不允许容器中有重复key值元素;
* - multimap允许容器中有重复key值元素.
*
* map构造:
* - `map<T1, T2> m;`,默认构造函数;
* - `map(const map & m);`,拷贝构造函数;
*
* 赋值:
* - `map& operator=(const map &m);`, 重载等号操作符.
*
* 大小和交换:
* - `size();`,返回容器中元素的数目;
* - `empty();`,判断容器是否为空;
* - `swap(map);`,交换两个map容器中的数据;
*
* 插入和删除:
* - `insert(elem);`,在容器中插入元素,多种插入方式:
* map<int, int> m;
* (1)`m.insert(pair<int, int>(1, 10));`;
* (2)`m.insert(make_pair(2, 20));`;
* (3)`m.insert(map<int, int>::value_type(3,30);`;
* (4)`m[4]=40;`
* 在上面四种插入方法中,虽然第4种最简单,但是第4中容易出错,如`m[5];`看起来像是在取value值,
* 但是这个操作其实创建了一个新的key-value对,只不过value是用默认值来进行填充的.
* - `clear();`,清除所有元素;
* - `erase(pos);`,删除pos迭代器所指的元素,返回下一个元素的迭代器;
* - `erase(beg, end);`,删除区间[beg, end)的所有元素,返回下一个元素的迭代器;
* - `erase(key);`,删除容器中值为key的元素.
*
* 查找和统计:
* - `find(key);`,查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
* - `count(key);`,统计key的元素的个数.
*
* 排序:与set排序基本相同,我们可以利用仿函数来改变插入数据时候的排序规则.
*/
一个栗子:
//
// Created by shexuan on 2021/1/23.
//
#include <iostream>
#include <string>
#include <map>
using namespace std;
class myCompare{
public:
// 记住这里加const,不然后报错
bool operator()(int v1, int v2) const {
// 降序
return v1>v2;
}
};
int main(){
map<int, int, myCompare> m;
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));
m.insert(pair<int, int>(5,50));
for (map<int, int, myCompare>::iterator it=m.begin();it!=m.end();it++){
cout << "first: " << it->first << " second: " << it->second << endl;
}
}