C++ STL(8)map

文章目录

  • 一、map
    • 1、简介
    • 2、初始化
    • 3、插入
    • 4、删除
    • 5、遍历
    • 6、查找

一、map

1、简介

std::map 是 C++ 标准模板库中的一个关联容器,它存储的元素是键值对(std::pair<Key, T>),其中 Key 表示键的类型,T 表示与键关联的值的类型。具备下面的特点:

  • 通常是基于红黑树(Red-Black Tree)实现的。
  • 元素按照键的顺序存储。键必须支持 < 运算符(或提供自定义比较函数),这样容器会根据键的大小自动排序元素。默认是按照键的升序排列元素,也可以提供自定义的比较函数或比较对象来改变排序规则。
  • 提供双向迭代器,允许正向和反向遍历元素。
  • 插入、删除和查找操作的时间复杂度为 O(logn)

2、初始化

以下是 std::map 的声明和初始化示例:

#include <iostream>
#include <map>
#include <string>

int main() {
    // 声明一个存储 std::string 到 int 的映射
    std::map<std::string, int> myMap;

    // 初始化
    std::map<std::string, int> anotherMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};
    return 0;
}

3、插入

可以使用下面的方法往std::map插入元素,如下:

方法一:使用 insert 方法:

std::map<std::string, int> myMap;
myMap.insert(std::make_pair("Alice", 25));
myMap.insert({"Bob", 30});
// 或者使用 insert 的返回值检查插入是否成功
auto result = myMap.insert({"Charlie", 35});
if (result.second) {
    std::cout << "Insertion successful" << std::endl;
}
  • insert 方法会尝试插入一个键值对,如果键已经存在,插入将失败。
  • 对于 insert 方法的返回值,它是一个 std::pair<iterator, bool>,其中 iterator 指向已存在的元素或新插入的元素,bool 表示插入是否成功。

方法二:使用 operator[]

myMap["David"] = 28;
  • 使用 operator[] 插入元素时,如果键不存在,会创建一个新元素并使用默认值初始化,对于基本类型,如 int,默认值为 0。
  • 如果键已经存在,会更新该键对应的值。

4、删除

使用erase方法删除std::map中的元素,如下:

std::map<std::string, int> myMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};

// 方法一:删除键为 "Bob" 的元素
myMap.erase("Bob");

// 方法二:查找 "Bob" 元素的迭代器,通过迭代器删除元素
auto it = myMap.find("Bob");
if (it!= myMap.end()) {
    myMap.erase(it);
}

5、遍历

可以使用下面两种方式遍历std::map,如下:

// 使用范围 for 循环
for (const auto& pair : myMap) {
    std::cout << pair.first << " is " << pair.second << " years old." << std::endl;
}

// 使用迭代器
for (auto it = myMap.begin(); it!= myMap.end(); ++it) {
    std::cout << it->first << " is " << it->second << " years old." << std::endl;
}

6、查找

使用find方法查找指定的元素,如下:

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> myMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};

    // 使用 find 方法查找元素
    std::string targetKey = "Bob";
    auto it = myMap.find(targetKey);

    if (it!= myMap.end()) {
        std::cout << "Found element with key '" << targetKey << "': " << it->first << " is " << it->second << " years old." << std::endl;
    } else {
        std::cout << "Element with key '" << targetKey << "' not found." << std::endl;
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957917.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

他把智能科技引入现代农业领域

江苏田倍丰农业科技有限公司&#xff08;以下简称“田倍丰”&#xff09;是一家专注于粮油种植的农业科技公司&#xff0c;为拥有300亩以上田地的大户提供全面的解决方案。田倍丰通过与当地政府合作&#xff0c;将土地承包给大户&#xff0c;并提供农资和技术&#xff0c;实现利…

电池预测 | 第22讲 基于GRU-Attention的锂电池剩余寿命预测

电池预测 | 第22讲 基于GRU-Attention的锂电池剩余寿命预测 目录 电池预测 | 第22讲 基于GRU-Attention的锂电池剩余寿命预测预测效果基本描述程序设计参考资料 预测效果 基本描述 电池预测 | 第22讲 基于GRU-Attention的锂电池剩余寿命预测 锂电池作为现代电子设备的重要动力…

Spring Boot AOP实现动态数据脱敏

依赖&配置 <!-- Spring Boot AOP起步依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>/*** Author: 说淑人* Date: 2025/1/18 23:03* Desc…

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理?

问题描述&#xff1a; UE成功打包APK并安装过后&#xff0c;启动应用时提示&#xff1a; No Google Play Store KeyNo OBB found and no store key to try to download. Please setone up in Android Project SettingsUE配置默认在打包APK时会附加生成一个OBB文件&#xff0c;…

Github 2025-01-20 开源项目周报 Top15

根据Github Trendings的统计,本周(2025-01-20统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Rust项目2TypeScript项目1C++项目1Jupyter Notebook项目1Go项目1Tabby: 自托管的AI编码助手 创建周期:310 天开发语言:Rust协议类…

给工作流穿上漂亮的衣服,创建用户交互界面并调用工作流,可定制的工作流,奶奶都能看明白的扣子智能体免费系列教程(10)

创建工作流看这个 搭建小红书梗图、歪理生成器工作流搭建 效果 欢迎来到滔滔讲AI。本教程为免费系列教程&#xff0c;感谢关注&#xff0c;以防找不到。 一、新建应用 方式一&#xff0c;点击左侧导航的加号 方式二、在工作空间面板选择右上角的创建按钮 选择创建应用 二、…

Python网络自动化运维---用户交互模块

文章目录 目录 文章目录 前言 实验环境准备 一.input函数 代码分段解析 二.getpass模块 前言 在前面的SSH模块章节中&#xff0c;我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中&#xff0c;这样很容易导致账户/密码泄露&#xff0c;而使用Python中的用户交…

免费送源码:Java+springboot+MySQL 婴儿疫苗接种管理系统的设计与实现 计算机毕业设计原创定制

目 录 摘要 1 1 绪论 1 1.1概述 1 1.2课题意义 1 1.3研究思路及创新之处 1 1.4springboot框架介绍 1 1.5论文结构与章节安排 1 2 婴儿疫苗接种管理系统分析 3 2.1 可行性分析 3 2.1.1 技术可行性分析 3 2.1.2 经济可行性分析 3 2.1.3 法律可行性分析 3 2.2 系统功…

三相电变为家庭220V,市电火线和零线关系,为什么用三相电输送

参考&#xff1a; https://www.zhihu.com/question/30555841/answer/85723024 上面是电力系统的主要组成&#xff0c;发电站发电后升压传输&#xff0c;然后到各大城市再降压使用。 我们看到电塔上都是三根线&#xff0c;那么因为整个过程都是三相电。 为什么用三相电&#xff…

CIMRTS材质美化--放大采样、缩小采样

最新的CIMRTS v1.0.10中在要素管理中的材质美化增加「放大采样」和「缩小采样」参数&#xff0c;对于透明树叶可以达到较好效果。 在CesiumLab中&#xff0c;一棵树处理完成后&#xff0c;在EarthSDK中&#xff0c;就是呈现这样缩小就会有树叶丢失的情况。效果如下&#xff1a…

SQL-leetcode—1179. 重新格式化部门表

1179. 重新格式化部门表 表 Department&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中&#xff0c;(id, month) 是表的联合主键。 这个表格有关…

城市生命线安全保障:技术应用与策略创新

城市生命线工程是维系城市正常运行、满足群众生产生活需要的重要基础设施。随着城市化进程的加快&#xff0c;城市基础设施生命线安全运行的复杂性日益加剧&#xff0c;保障城市居民日常生活正常运行的水、电、气、热等各类地下管线以及桥梁、市政设施、轨道交通等城市基础设施…

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…

Genetic Prompt Search via Exploiting Language Model Probabilities

题目 利用语言模型概率的遗传提示搜索 论文地址&#xff1a;https://www.ijcai.org/proceedings/2023/0588.pdf 项目地址&#xff1a;https://github.com/zjjhit/gap3 摘要 针对大规模预训练语言模型(PLMs)的即时调优已经显示出显著的潜力&#xff0c;尤其是在诸如fewshot学习…

如何引导LabVIEW项目相关方合理参与项目?

引导 LabVIEW 项目相关方合理参与项目&#xff0c;是保障项目顺利推进的关键所在。合理引导&#xff0c;既能显著提升项目执行效率&#xff0c;又能让各方清晰知晓自身在项目中的角色与责任。以下为具体策略与建议&#xff1a; ​ 一、明确项目目标与需求 清晰沟通项目目标&a…

Maven的下载安装配置

maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具&#xff0c;由 Apache 组织提供。它不仅可以用作包管理&#xff0c;还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理&#xff1a;Maven定义了项目构建…

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告&#xff1a;高光谱成像技术检测食物新鲜度 检测原理&#xff1a;不同新鲜程度的食品&#xff0c;其化学成分和结构会有所不同&#xff0c;在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

MySQL可直接使用的查询表的列信息

文章目录 背景实现方案模板SQL如何查询列如何转大写如何获取字符位置如何拼接字段 SQL适用场景 背景 最近产品找来&#xff0c;想让帮忙出下表的信息&#xff0c;字段驼峰展示&#xff0c;每张表信息show create table全部展示&#xff0c;再逐个粘贴&#xff0c;有点太耗费时…

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 在享元模式中&#xff0c;存储这些共享实例对象的地方称为享元池&…

汇编与逆向(二)-汇编基础

一、汇编入门 &#xff08;一&#xff09;x86体系的CPU的工作模式 有两种基本的工作模式&#xff1a;实模式和保护模式。 实模式&#xff1a;也称为实地址模式&#xff0c;该模式最早被DOS&#xff0c;win9x所支持。可访问1M内存&#xff0c;可直接访问硬件&#xff0c;如对…