map(STL容器)

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;
}
posted @ 2024-03-24 15:03  adsd45666  阅读(15)  评论(0编辑  收藏  举报