FX-std::map

news/2025/3/14 8:24:32/

std::map 是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs),并根据键自动排序。它基于红黑树实现,具有对数时间复杂度的插入、删除和查找操作。

基本用法

1. 包含头文件

使用 std::map 需要包含头文件 <map>

#include <map>
2. 定义和初始化

std::map 的定义和初始化可以通过以下方式实现:

std::map<KeyType, ValueType> myMap;

例如,定义一个键为 int,值为 std::string 的 std::map

std::map<int, std::string> myMap;

也可以在定义时初始化:

std::map<int, std::string> myMap = {{1, "Apple"},{2, "Banana"},{3, "Cherry"}
};
3. 插入元素

可以使用 insert 方法或 operator[] 插入元素。

  • 使用 insert

myMap.insert(std::make_pair(4, "Date"));
  • 使用 operator[]

myMap[5] = "Elderberry";

如果键已经存在,operator[] 会更新对应的值,而 insert 不会更新。

4. 访问元素

可以使用 operator[] 或 at 方法访问元素。

  • 使用 operator[]

std::string fruit = myMap[1];  // fruit = "Apple"
  • 使用 at

std::string fruit = myMap.at(2);  // fruit = "Banana"

operator[] 在键不存在时会插入一个默认构造的值,而 at 会抛出 std::out_of_range 异常。

5. 删除元素

可以使用 erase 方法删除元素。

  • 通过键删除:

myMap.erase(3);  // 删除键为 3 的元素
  • 通过迭代器删除:

auto it = myMap.find(2);
if (it != myMap.end()) {myMap.erase(it);
}
6. 查找元素

可以使用 find 方法查找元素。

auto it = myMap.find(1);
if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;
} else {std::cout << "Not found" << std::endl;
}
7. 遍历元素

可以使用迭代器遍历 std::map

for (auto it = myMap.begin(); it != myMap.end(); ++it) {std::cout << it->first << ": " << it->second << std::endl;
}

或者使用范围-based for 循环:

for (const auto& pair : myMap) {std::cout << pair.first << ": " << pair.second << std::endl;
}
8. 其他常用操作
  • 获取大小:

size_t size = myMap.size();
  • 检查是否为空:

bool isEmpty = myMap.empty();
  • 清空 std::map

myMap.clear();

示例代码

#include <iostream>
#include <map>
#include <string>int main() {std::map<int, std::string> myMap = {{1, "Apple"},{2, "Banana"},{3, "Cherry"}};// 插入元素myMap[4] = "Date";myMap.insert(std::make_pair(5, "Elderberry"));// 访问元素std::cout << "Key 1: " << myMap[1] << std::endl;std::cout << "Key 2: " << myMap.at(2) << std::endl;// 删除元素myMap.erase(3);// 查找元素auto it = myMap.find(4);if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;} else {std::cout << "Not found" << std::endl;}// 遍历元素for (const auto& pair : myMap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}

总结

std::map 是一个非常有用的容器,适用于需要根据键快速查找、插入和删除的场景。它的元素是按键自动排序的,因此在需要有序存储时非常方便。


http://www.ppmy.cn/news/1578989.html

相关文章

Python刷题:Python基础

今天刷的是PythonTip的Python 入门挑战中的题&#xff0c;整体难度不高&#xff0c;适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 梦想不会发光&#xff0c;发光的是追逐梦想的我们。 只要你真的愿意为自己的梦想去努力&#xff0c; 最差的结果&#xff0c;…

rtsp在网页上显示(webrtc-stream)

一&#xff1a;windos 平台 1&#xff1a;下载已经编译好的windos平台程序 Releases mpromonet/webrtc-streamer (github.com) or 【免费】webrtc-streamerv0.8.6一款werbrtc服务器&#xff08;windos版本&#xff09;&#xff0c;可以直接将rtsp流拉到网页上显示资源-CSDN文…

课题推荐——无人机在UWB环境下基于TOA/TDOA/AOA的室内定位与精度对比

随着无人机在工业检测、仓储物流、应急救援等室内场景的广泛应用&#xff0c;高精度室内定位技术成为关键支撑。超宽带&#xff08;UWB&#xff09;技术凭借其高时间分辨率、强抗多径能力等优势&#xff0c;成为室内定位的主流方案。然而&#xff0c;不同的定位方法&#xff08…

【RK3588嵌入式图形编程】-SDL2-构建一个多功能的图像类

构建一个多功能的图像类 文章目录 构建一个多功能的图像类1、概述2、设计原则2.1 友好API2.2 性能2.3 反馈2.4 破坏性变更和可扩展性3、加载文件4、源矩形5、目标矩形6、渲染和缩放模式7、完整代码8、总结本文将详细介绍如何设计一个灵活的组件,方便SDL的应用程序中处理图像。…

Nginx 生产环境安全配置加固

以下是Nginx生产环境安全配置加固的综合方案&#xff0c;结合多个技术实践和行业标准整理&#xff1a; 一、基础安全防护 1‌. 隐藏版本信息‌ 在http或server块添加server_tokens off;&#xff0c;避免暴露Nginx版本号‌。使用headers-more-nginx-module模块彻底移除响应头…

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

目录 设计一个带看门狗(Watchdog)的嵌入式系统,描述故障恢复流程 在资源受限的 MCU 上实现 OTA 升级功能,描述关键设计点 如何实现 OTA(空中升级)功能?描述固件校验和回滚机制的设计要点 推挽输出与开漏输出的区别?举例说明其在 GPIO 控制中的应用 UART、SPI、I2C …

单机DeepSeek做PPT,YYDS!

今天同事问我 AI 能不能做 PPT&#xff0c;有个述职报告要做&#xff0c;问我能不能帮忙&#xff0c;这时我脑海中的第一画面就是 DeepSeek Kimi DeepSeek 擅长逻辑构建与内容生成&#xff0c;其深度思考能力当前测试下来&#xff0c;不愧为国内No.1&#xff0c;而且还会把中间…

SPA应用优化首屏加载速度

一、问题产生原因&#xff1a; 网络延时问题 资源文件体积过大 资源重复请求加载 二、常见解决方案 减小入口文件体积 常用的手段是路由懒加载&#xff0c;在配置vue-router时以函数的形式动态导入加载&#xff0c;这样可以把不同的路由组件分别打包&#xff0c;只有在解析具…