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

FX-std::map

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.kler.cn/a/583919.html

相关文章:

  • CLR中的类型转换
  • Redis7——进阶篇(六)
  • Chat-TTS-UI:文字转语音 - 本地部署方案
  • 根据TCP中的拥塞控制细说网卡了数据怎么传输
  • Spring Boot 项目中application.yml 和 bootstrap.yml 文件的区别
  • AISuite:一个新的开源Python库,提供了统一的跨LLM API
  • 深入解析:如何通过Spring Boot启动器无缝集成LangChain4j实现AI服务自动化
  • 轻量级嵌入式WebRTC开发:音视频通话EasyRTC纯C语言实现SFU/MCU架构与QoS优化
  • 浅谈时钟启动和Systemlnit函数
  • Vue3生态工具:Volar语言服务与Unplugin自动化导入配置
  • 算法每日一练 (11)
  • EngineerCMS完整版支持OnlyOffice8.2文档协作
  • 双 Token 无感刷新机制在前后端分离架构中实现
  • 实现图形界面访问无显示器服务器
  • Python网络爬虫之BeautifulSoup库的基本结构
  • Python :数据模型
  • 社交软件频繁更新,UI 设计在其中扮演什么角色?
  • ES 使用geo point 查询离目标地址最近的数据
  • Flutter 按钮组件 TextButton 详解
  • UFW 配置 Ubuntu 防火墙并设置防火墙规则