当前位置: 首页 > article >正文

3.7-STL(七)(map篇)

### 这里重点学习map### 在实际做题过程中,multimap几乎用不到### unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的,unordered_map一般用不到,要做一个了解1.mapmap是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的map容器根据键来自动进行排序,并且可以通过键快速查找对应的值map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入,删除和查找操作的时间复杂度0(logn)map的定义和结构如下:template class Key, class T,class Compare lessKey, class Allocatorallocatorpairconst Key, T class map;Key:表示存储在map中的键(key)的类型T:表示存储在map中的值(value)的类型Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数Allocator:表示用于分配内存的分配器类型,默认为allocator2.multimapmultimap是一种关联容器,类似于map,但允许存储多个具有相同键的键值对multimap容器根据键来自动进行排序,并且可以通过键快速查找对应的值multimap容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入,删除和查找操作的时间复杂度multimap的定义和结构如下:template class Key,class T,class Compare lesskey, class Allocatorallocatorpairconst Key,T class multimap;Key:表示存储在multimap中的键(key)的类型T:表示存储在multimap中的值(value)的类型Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数Allocator:表示用于分配内存的分配器类型,默认为allocator3.unordered_mapunordered_map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的与map和multimap不同,unordered_map不会根据键的顺序进行排序,而是使用哈希函数将键映射到存储桶中,这使得unordered_map具有更快的插入,删除和查找操作的时间复杂度,但不保证元素的顺序unordered_map的定义和结构如下:template class Key, class T, class Hash hashKey, class KeyEqualequal_toKey, class Allocatorallocatorpairconst Key,T class unordered_map;Key:表示存储在unordered map中的键(key)的类型。T:表示存储在unordered map中的值(value)的类型。Hash:表示用于计算键的哈希值的函数对象的类型,默认为hash,使用键类型的默认哈希函数KeyEqual:表示用于比较键的函数对象的类型,默认为equal_to,使用键类型的默认比较函数Allocator:表示用于分配内存的分配器类型,默认为allocator### 一般情况下我们更愿意使用复杂度稳定的map而不是unordered map4.代码示例map#includeiostream #includemap using namespace std; int main(){ //创建并初始化map mapint,stringmyMap{{1,Apple},{2,Banana},{3,Orange}}; //插入函数 myMap.insert(make_pair(4,Grapes)); //查找和访问元素 coutValue at key 2:myMap[2]\n; //遍历并打印map中的元素 for(const autopair:myMap){ coutKey:pair.first,Value:pair.second\n; } //删除元素 myMap.erase(3); //判断元素是否存在 if(myMap.count(3)0){ coutKey 3 not found.\n; } //清空map myMap.clear(); //判断map是否为空 if(myMap.empty()){ coutMap is empty.\n; } return 0; }### 一般不会手动初始化### insert那行也可以这样写myMap.insert({Key,Value}### 注意myMap[3]0时,这个count(3)依然是不为0的,因为它的键值对存在,只不过值为0输出:multimap#includeiostream #includemap using namespace std; int main(){ //创建并初始化 multimap multimapint,stringmyMultimap{{1,Apple},{2,Banana},{2,Orange}}; //插入元素 myMultimap.insert(make_pair(3,Grapes)); //查找和访问元素 auto rangemyMultimap.equal_range(2); for(auto itrange.first;it!range.second;it){ coutKey:it-first,Value:it-second\n; } //遍历并打印multimap中的元素 for(const autopair:myMultimap){ coutKey:pair.first,Value:pair.second\n; } //删除元素 myMultimap.erase(2); //判断元素是否存在 if(myMultimap.count(2)0){ coutKey 2 not found.\n; } //清空multimap myMultimap.clear(); //判断multimap是否为空 if(myMultimap.empty()){ coutMultimap is empty.\n; } return 0; }### 因为它允许有多个相同键,所以它就不能用[ ]来取出,要用equal_range(Key); //range它表示迭代器的一个范围,range.first就是起始迭代器,range.second就是终止迭代器的下一位输出:unordered_map#includeiostream #includeunordered_map using namespace std; int main(){ //创建并初始化unordered_map unordered_mapstring,intmyMap{{Apple,3},{Banana,5},{Orange,2}}; //插入元素 myMap.insert(make_pair(Grapes,4)); //查找和访问元素 coutValue for key Banana:myMap[Banana]\n; //遍历并打印undordered_map中的元素 for(const autopair:myMap){ coutKey:pair.first,Value:pair.second\n; } //删除元素 myMap.erase(Orange); // 判断元素是否存在 if(myMap.count(Orange)0){ coutKey Orange not found.\n; } //清空undorderd_map myMap.clear(); //判断undorderd_map是否为空 if(myMap.empty()){ coutUnordered_map is empty.\n; } return 0; }输出:

相关文章:

3.7-STL(七)(map篇)

### 这里重点学习map ### 在实际做题过程中,multimap几乎用不到### unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的,unordered_map一般用不到,要做一个了解1.mapmap是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键…...

推荐开源项目:OpenBMC - 未来服务器管理的利器

推荐开源项目:OpenBMC - 未来服务器管理的利器 【免费下载链接】openbmc OpenBMC Distribution 项目地址: https://gitcode.com/gh_mirrors/op/openbmc 1、项目介绍 OpenBMC 是一个基于 Linux 的管理控制器分布,专门设计用于服务器、顶部机架交换…...

终极iOS防崩溃指南:如何使用AvoidCrash框架避免Objective-C运行时陷阱

终极iOS防崩溃指南:如何使用AvoidCrash框架避免Objective-C运行时陷阱 【免费下载链接】AvoidCrash This framework can effective avoid crash by potential error code. For example : If you insert a nil into a mutable array, this framework can avoid crash…...

Eisvogel与Docker结合:免安装LaTeX环境快速生成PDF文档

Eisvogel与Docker结合:免安装LaTeX环境快速生成PDF文档 【免费下载链接】pandoc-latex-template A pandoc LaTeX template to convert markdown files to PDF or LaTeX. 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc-latex-template GitHub 加速计划…...

csvkit新手入门:5分钟掌握in2csv,轻松转换非CSV格式文件

csvkit新手入门:5分钟掌握in2csv,轻松转换非CSV格式文件 【免费下载链接】csvkit A suite of utilities for converting to and working with CSV, the king of tabular file formats. 项目地址: https://gitcode.com/gh_mirrors/cs/csvkit csvki…...

如何快速搭建Ruby on Rails管理后台:Trestle现代化框架的完整指南

如何快速搭建Ruby on Rails管理后台:Trestle现代化框架的完整指南 【免费下载链接】trestle A modern, responsive admin framework for Ruby on Rails 项目地址: https://gitcode.com/gh_mirrors/tr/trestle Trestle是一个为Ruby on Rails设计的现代化响应式…...

ProcessHacker高级筛选器创建:基于多条件组合定位进程

ProcessHacker高级筛选器创建:基于多条件组合定位进程 【免费下载链接】systeminformer A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Solution…...

Gorilla机器学习工作流:模型训练与部署的API调用自动化

Gorilla机器学习工作流:模型训练与部署的API调用自动化 【免费下载链接】gorilla Gorilla: An API store for LLMs 项目地址: https://gitcode.com/gh_mirrors/go/gorilla Gorilla作为一个专为大型语言模型(LLMs)设计的API商店,通过自动化API调用…...

如何快速上手RancherOS:10分钟从零开始部署容器化操作系统

如何快速上手RancherOS:10分钟从零开始部署容器化操作系统 【免费下载链接】os Tiny Linux distro that runs the entire OS as Docker containers 项目地址: https://gitcode.com/gh_mirrors/os/os RancherOS是一款将整个操作系统作为Docker容器运行的轻量级…...

Multi-Agent Orchestrator快速入门指南:5分钟搭建你的第一个AI代理系统

Multi-Agent Orchestrator快速入门指南:5分钟搭建你的第一个AI代理系统 【免费下载链接】multi-agent-orchestrator Flexible and powerful framework for managing multiple AI agents and handling complex conversations 项目地址: https://gitcode.com/GitHub…...

3步上手stock-knowledge-graph:快速搭建你的证券知识图谱

3步上手stock-knowledge-graph:快速搭建你的证券知识图谱 【免费下载链接】stock-knowledge-graph 利用网络上公开的数据构建一个小型的证券知识图谱/知识库 项目地址: https://gitcode.com/gh_mirrors/st/stock-knowledge-graph stock-knowledge-graph是一个…...

如何在AWS/GCP/Azure上搭建LabelMe云标注平台:完整部署指南

如何在AWS/GCP/Azure上搭建LabelMe云标注平台:完整部署指南 【免费下载链接】labelme Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 项目地址: https://gitcode.com/gh_mirrors/lab/labe…...

RISC-V GNU 编译工具链项目教程

RISC-V GNU 编译工具链项目教程 【免费下载链接】riscv-gnu-toolchain GNU toolchain for RISC-V, including GCC 项目地址: https://gitcode.com/gh_mirrors/ri/riscv-gnu-toolchain 1. 项目目录结构及介绍 RISC-V GNU 编译工具链项目是一个用于构建 RISC-V 架构的 C …...

LikeC4 开源项目教程

LikeC4 开源项目教程 【免费下载链接】likec4 Visualize, collaborate, and evolve the software architecture with always actual and live diagrams from your code 项目地址: https://gitcode.com/GitHub_Trending/li/likec4 1. 项目介绍 LikeC4 是一个用于描述软件…...

Meteroid 开源项目使用教程

Meteroid 开源项目使用教程 【免费下载链接】meteroid Product-led Billing and Revenue Infrastructure 项目地址: https://gitcode.com/gh_mirrors/me/meteroid 1. 项目的目录结构及介绍 Meteroid 项目的目录结构如下: meteroid/ ├── assets/ ├── …...

【亲测免费】 探索未来芯片世界:RISC-V GNU 编译工具链深入解析与推荐

探索未来芯片世界:RISC-V GNU 编译工具链深入解析与推荐 【免费下载链接】riscv-gnu-toolchain GNU toolchain for RISC-V, including GCC 项目地址: https://gitcode.com/gh_mirrors/ri/riscv-gnu-toolchain 项目介绍 在开源软件与硬件的交响乐中&#xff…...

无头浏览器终极指南:自动化测试与网页爬虫的未来趋势

无头浏览器终极指南:自动化测试与网页爬虫的未来趋势 【免费下载链接】HeadlessBrowsers A list of (almost) all headless web browsers in existence 项目地址: https://gitcode.com/gh_mirrors/he/HeadlessBrowsers 无头浏览器是一种没有图形用户界面、可…...

C++11——统一的 { } 初始化

1. C11简介 在2003年 C标准委员会曾经提交了一份技术勘误表(简称TC1),使得 C03 这个名字已经取代了C98,称为 C11之前的最新C标准名称。不过由于 C03(TC1) 主要是对 C98 标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习…...

【C++笔记】二叉搜索树

前言 各位读者朋友们大家好!上期我们讲完了面向对象编程三大属性之一的多态,这一期我们再次开始数据结构二叉搜索树的讲解。 目录前言一. 二叉搜索树的概念二. 二叉搜索树的性能分析三. 二叉搜索树的插入四. 二叉搜索树的查找五. 二叉搜索树的删除六. 二…...

PyCaret特征工程:轻松构建专业级特征缩放与选择Pipeline

PyCaret特征工程:轻松构建专业级特征缩放与选择Pipeline 【免费下载链接】pycaret An open-source, low-code machine learning library in Python 项目地址: https://gitcode.com/gh_mirrors/py/pycaret PyCaret是一款开源的低代码机器学习库,它…...

Win-Debloat-Tools计划任务管理:优化系统后台运行的终极指南

Win-Debloat-Tools计划任务管理:优化系统后台运行的终极指南 【免费下载链接】Win-Debloat-Tools Re-imagining Windows like a minimal OS install, already debloated with minimal impact for most functionality. 项目地址: https://gitcode.com/gh_mirrors/w…...

Vue项目改造指南:轻松修改启动后的Logo和名称

目录 前言 一、修改前的准备工作 1.1 了解项目结构 1.2 准备素材 二、修改浏览器标签页图标和标题 2.1 替换Favicon图标 2.2 修改网页标题 2.3 验证修改效果 总结 前言 在Vue项目开发中,我们经常需要根据项目需求修改默认的品牌标识。无论是企业级管理系统…...

Django-Oscar优惠券与促销系统:10种营销策略的终极实现指南

Django-Oscar优惠券与促销系统:10种营销策略的终极实现指南 【免费下载链接】django-oscar django-oscar/django-oscar: 是一个基于 Django 的电子商务框架,可以用于快速开发和部署电子商务网站,提供了多种电子商务功能和插件扩展。 项目地…...

基于代价的连接条件下推,金仓数据库让我们不在焦虑

你是否遇到过这样的场景:一个看似复杂的SQL,在测试环境运行飞快,一到生产环境就"卡死",一查执行计划,发现子查询生成了一个巨大的中间结果集,导致后续操作全部陷入性能泥潭? 如果你正…...

复杂查询中 JOIN 条件下推失败导致的性能瓶颈-金仓数据库

文章目录前言一、问题背景1.1 客户场景中的典型痛点1.2 业界普遍面临的两大难点1.2.1 语义安全性(Equivalence)1.2.2 代价评估(Cost)二、传统方案的局限2.1 完整执行子查询2.2 生成庞大的中间结果集2.3 再与外层表进行 JOIN三、金…...

WHAT - 缓存命中 Cache Hit 和缓存未命中 Cache Miss

文章目录一、什么是缓存命中二、前端开发要知道哪些缓存机制(以及命中条件)1. 浏览器缓存(主要针对静态资源)常见的缓存位置关键 HTTP 头字段(决定命中与否)2. 前端应用层缓存(例如数据请求&…...

一文搞定常见网络安全技术:网络攻击与核心防范手段全景解析(建议收藏)

伴随着互联网的发展,它已经成为我们生活中不可或缺的存在,无论是个人还是企业,都离不开互联网。正因为互联网得到了重视,网络安全问题也随之加剧,给我们的信息安全造成严重威胁,而想要有效规避这些风险&…...

Linux网络安全从入门到精通:基础命令、安全配置与实战案例(保姆级教程)

Linux网络安全一直是IT行业中备受关注的话题,而红帽作为Linux操作系统的知名发行版,在网络安全领域也扮演着重要的角色。红帽公司一直致力于为用户提供安全可靠的Linux解决方案,以帮助用户建立强大的网络安全防护体系。 首先,红帽…...

cobbler + pxe+dhcp+tftp+httpd+kickstart无人值守装系统

一、cobbler简介 cobbler是基于Python2开发并整合pxe+kickstart技术的二次封装工具,简化了安装部署流程,增加了对多发行版的支持,并且有独立的web管理页面,极大方便了运维初级人员的学习和使用。另外cobbler还提供了API,方便二次开发。 该文章主要介绍使用cobbler自动装机…...

网络安全岗位全解析:从入门到优秀工程师的进阶路线图(建议收藏)

网络安全是什么? 首先说一下什么是网络安全? 网络安全工程师工作内容具体有哪些? 网络安全是确保网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而受到破坏、更改、泄露,系统连续可靠正常地…...