map
一种基于红黑树(不需了解)的关联树容器,支持快速的插入,查找和删除操作,并保持了内部元素的有序性,其中每一个元素都有一个键和一个与之关联得值组成。
可以形象的理解为一个转换器,给它一个东西(变量),它就对应的给你一个东西(变量)。
我们无需了解map的底层结构 , 只需知道如何使用以及相关的时间复杂度即可;
(1.map的结构:
在map中,\(i\)个\(key\)值,确定了\(i\)个\(<key,value>\)键值对,但是由于其内部的特殊结构,在进行各项操作时复杂度都很优秀。
(2.map初始化
在使用map时,需引入头文件<map>
(如果是万能头当我没说)。
#include<map>
//#include<bits/stdc++.h> //懒人之选
using namespace std; //map在std的命名空间中
例:
我们用上面的代码来声明一个map,其中\(T_key\),\(T_value\)为数据类型
一般情况下,我们只声明一个空的\(map\),然后再往里面插入键值对。
注:在map键值对中<key,value>中,一个\(key\)唯一对应一个\(value\),不同的\(key\)有可能对应
相同的\(value\),就像数学函数中自变量和因变量的关系。
(3.map的基本操作
方法 | 作用 | 时间复杂度 |
---|---|---|
insert({key,value}) | 插入一对键值对<key,value> | \(O(log_n)\) |
erase(key) | 消除key所对的键值对 | \(O(log_n)\) |
find(key) | 查找指定键key所对的迭代器 | \(O(log_n)\) |
operator[key] | 查找指定键key所对的值 | \(O(log_n)\) |
count(key) | 查找是否存在key的键值对 | \(O(log_n)\) |
size() | 返回map中键值对的数量 | \(O(1)\) |
clear() | 清空map中的键值对 | \(O(n)\) |
empty() | 判断map是否为空 | \(O(1)\) |
begin() | 返回第一个键值对所对的迭代器 | \(O(1)\) |
end() | 返回最后一个键值对所对的迭代器 | \(O(1)\) |
注:在进行取值操作(\([]\) 操作符)时,一定保证key值存在,否则会产生错误,判断是否存在有如下几种方法:
map<int,int>mp;
//1.运用count函数:
if(mp.count(key))
cout<<"1"<<endl;
//2.运用find函数
if(mp.find(key)!=mp.end)
cout<<"1"<<endl;
遍历map一般也有两种方法:
map<int,int>mp;
//1.用auto关键字进行遍历
for(auto &i : mp)
cout<<i.first<<" "<<i.second<<endl;
//2.用迭代器进行遍历
map<int,int>::iterator it;
for(it=mp.begin();it!=mp.end;it++){
//cout<<(*it).first<<" "<<(*it).second<<endl;
cout<<it->first>>" ">>it->second>>endl;
}
标签:map,log,容器,STL,value,键值,mp,key
From: https://www.cnblogs.com/adsd45666/p/18092438