Map

map是C++STL中提供的容器,由红黑树构成,我们可以通过map创建所谓的键值映射的功能

map的基本使用

创建map

map<int,int> maps; //数据类型自己定义

map中添加键值

maps[1] = 2;  
maps[2] = 3;
maps["hello"] = 1;

map中遵循初始化的时候前面的数据类型,后面的值遵循初始化后面的数据类型

map访问

//由于上面已经创建了几个案例,我们就对他们进行访问
cout << maps[1] << endl; 通过键为1,去访问对应的value
cout << maps[2] << endl; // 3

map遍历

//通过迭代器进行访问
for (auto it = mp.begin(); it != mp.end(); it++) {
cout << it -> first << " " << it -> second << endl;
}

//C++11访问(推荐使用)
for(auto it : maps) {
cout << it.first << " " << it.second << endl;
}

// 方法三、 C++ 17版本及以上
for (auto [key, val] : mp) {
cout << key << " " << val << endl;
}

Map迭代器

迭代器数据类型是auto一定要记住

map首尾迭代器

首元素迭代器,代表了第一个元素

auto it = maps.begin();

代表了最后一个元素的后一个元素

auto it = maps.end();

如想要获取最后一个元素的前面一个元素的迭代器

auto it = maps.end();
--it;

迭代器能干什么?

其实迭代器就相当于map中每一个元素的地址,我们通过地址可以访问到对应的元素,在map里也就是键和值

如何获取到键和值呢?

auto it = maps.begin();
cout << it->first << endl; //获取键
cout << it->second << endl; //获取值

查找

map中的find主要是用来通过find(键) 来查找某一个map中元素的迭代器

auto it = maps.find(1);

删除

map是听过键值来进行删除的

maps.erase(键值);

判断map中是否包含某一个元素

int a = maps.count(键值); //如果找到某一个键,返回结果为1,反之返回0

清除map中元素

maps.clear();

判断map容器是否为空

maps.empty();

map大小(对遍历元素没有什么帮助)

cout << maps.size();

map和unordered_map

听名字,就知道map和unordered_map一个是有序的,一个是无序的

map存储元素的时候默认是按照键值进行排序的

而unordered_map里面的元素是混乱的

浅谈优缺点

  • map占用空间少,unordered_map占用空间多
  • 时间复杂度方面,map为O(logn),unordered_map为O(1)

本篇博客针对于算法做题时候,会了这些操作完全足够了,希望对你产生帮助

叭叭咯~~~