首页 > 其他分享 >map(STL容器)

map(STL容器)

时间:2024-03-24 15:12:21浏览次数:13  
标签:map log 容器 STL value 键值 mp key

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

相关文章

  • TreeMap从添加第二个元素开始,需要进行排序,原始类继承Comparable<Student>接口实现comp
    重写compareTo方法,关于o的理解@OverridepublicintcompareTo(Studento){//关于o,是红黑树中从第二个开始进入的元素,需//要和已存在的元素比较,该o是在第二个add//调用时,传入这里的Student对象。//根据题设,先用年龄排序in......
  • C++:map&set 对红黑树的封装
    C++:map&set对红黑树的封装将红黑树封装为泛型Find接口迭代器insert接口map的operator[]接口总代码展示C++的STL库中,把红黑树封装为了两个容器map与set,本博客将基于红黑树,来实现map和set的封装。如果不了解红黑树,可见博客[数据结构/C++:红黑树]将红黑树封装为泛型......
  • 并发容器之CopyOnWrite
    CopyOnWrite容器什么是CopyOnWrite容器呢?CopyOnWrite容器是一个写时复制的容器。在向容器中添加元素时,不会直接向当前容器中添加,而是将当前容器进行copy,复制出一个新的容器,然后往新的容器中添加元素,添加完元素之后,再将容器的引用指向新的容器。使得我们可以对CopyOnWrite......
  • Lecture 09 Shading 3 (Texture Mapping cont
    Lecture09Shading3(TextureMappingcont.)Shading3Barycentriccoordinates重心坐标为了在三角形内部任何一点内插值,我们引入重心坐标为什么需要插值?指定顶点属性在三角形内部保持平滑变化插值什么内容?纹理坐标、颜色、法向量,...怎么做插值?重心坐标......
  • Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
    Lecture08Shading2(Shading,PipelineandTextureMapping)ShadingfrequenciesP1每个面着色一次P2每个顶点着色一次,每个三角面内插值P3每个像素着色一次FlatShading(逐三角形)每个三角面是一个平面,只有一个法线在光滑表面效果不好Gouraudshading(逐顶点)每个......
  • HasMap底层分析
    一、散列表结构HashMap的存储结构为数组+链表+红黑树同时它的数组的默认初始容量是16、扩容因子为0.75,每次采用2倍的扩容。也就是说,每当我们数组中的存储容量达到75%的时候,就需要对数组容量进行2倍的扩容。初始容量和负载因子也可以通过构造方法指定: publicHashM......
  • c++ stl 之映射—— map 详解
     map是stl的一个关联容器,名叫“映射”,何为“映射”?其实就是一个数组,但有了数组何必还需映射,这是一个高深的问题。目录一、map简介         1.空间复杂度    2.时间复杂度     3.“键”的类型二、 map用法     1.声明  ......
  • 构建空间场景轻应用,Mapmost Alpha来啦【文末赠书(10本)--第二期】
    文章目录:一、MapmostAlpha介绍二、MapmostAlpha应对数字孪生业务痛点解决之道2.1MapmostAlpha提供海量城市底板2.2MapmostAlpha提供便捷的配置管理工具2.3MapmostAlpha提供一键式部署发布和分享三、沉浸式体验MapmostAlpha3.1创建应用3.2新手指导3.3场......
  • Golang: 探究sync.map的实现
    Golang:探究sync.map的实现背景探究下载并发模式下,sync.map的实现,以及该实现方式可能引入的问题链接Github基本使用packagemainimport"sync"funcmain(){ m:=sync.Map{} m.Load("key") m.Store("key","value") m.LoadOrStore("key",&q......
  • HashMap的数组最大容量为什么要设计为2的30次方?而不是2的31次方-1?数组容量为什么一定
    目录问题 数组容量为什么一定要设计为2的幂(2的n次方)?1、首先要清楚HashMap的底层基本原理2、再来看下怎么通过hash值决定存放在哪个桶中?首先看下hash值再看下怎么确定当前key存放在哪个数组下标下的为什么要做按位与而不用模运算符%?为什么要n-1呢?n是一个什么样的数......