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(STL容器)的更多相关文章

  1. STL容器——对map排序

    STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...

  2. 【STL容器学习】-关联容器与map的用法

    STL提供了4个关联容器:set.multiset.map和multimap.这些容器提供了通过keyword高速存储和訪问数据元素的能力.Set和map不同意有反复keyword,而multiset ...

  3. C++STL之map映照容器

    map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的, 键值与映照数据之间具有一一映照关系. map映照容器的数据结构也是采用红黑树来实现的, 插入元素的键值不允许重复, 比较函数 ...

  4. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

  5. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  6. STL容器迭代器失效分析

    连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...

  7. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  8. STL容器的遍历删除

    STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...

  9. STL容器与配接器

    STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求 ...

  10. STL容器的本质

    http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...

随机推荐

  1. dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型

    本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型.在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型.此类型的定义仅仅只是为 ...

  2. HarmonyOS 鸿蒙隔离层设计

    在软件开发中,底层库的更换或升级是常见的需求,这可能由性能提升.新功能需求或安全性考虑等因素驱动.为了降低迁移成本,良好的设计模式至关重要. 在版本迭代过程中,网络请求库可能会经历从A到B再到C的演进 ...

  3. vue+vant+js实现购物车原理小demo(基础版)

    电商毕业设计里的一个购物车demo,拿vue+vant需要写的核心计算代码只有12行.效果图: main.js: Vue.use(Stepper); .vue文件 <template> & ...

  4. 解密Prompt系列28. LLM Agent之金融领域摸索:FinMem & FinAgent

    本章介绍金融领域大模型智能体,并梳理金融LLM的相关资源.金融领域的大模型智能体当前集中在个股交易决策这个相对简单的场景,不需要考虑多资产组合的复杂场景.交易决策被简化成市场上各个信息,包括技术面,消 ...

  5. 零知识证明: Tornado Cash 项目学习

    前言 最近在了解零知识证明方面的内容,这方面的内容确实不好入门也不好掌握,在了解了一些基础的概念以后,决定选择一个应用了零知识证明的项目来进行进一步的学习.最终选择了 Tornado Cash 这个项 ...

  6. 图片GPS度分秒转换经纬度

    图片位置信息转化经纬度 1 public static String strToLatOrLng(String str) { 2 int i = str.lastIndexOf("°&quo ...

  7. Flyway简单迁移失败问题

    因为我是初学者,所以问题 只是一些细节性问题,现在看看V开头创建数据库迁移时的错误 问题一: flyway 命名规则问题这个绝对的细节中的细节问题 问题一解决方案: 命名规则:一定要遵循flyway的 ...

  8. golang 切片原理面试题

    package main import "fmt" func main() { var s = make([]int, 0, 10) _ = append(s, 1,2,3) fm ...

  9. 鸿蒙极速入门(五)-路由管理(Router)

    页面路由指在应用程序中实现不同页面之间的跳转和数据传递.HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面. 一.基础使用 Router模块提 ...

  10. 申请并部署免费的 SSL/TLS 证书

    对于囊中羞涩的我们来说,只要能白嫖,就绝不乱花钱.惯常申请免费 SSL/TLS 证书的途径有: 各大云服务平台限量提供.比如阿里云会给每个账号每年 20 个证书的申请额度.缺点是不支持泛域名,一年后须 ...