首页 > 编程语言 >C++头文件map

C++头文件map

时间:2025-01-07 21:33:48浏览次数:12  
标签:std map 头文件 cout 迭代 元素 C++ myMap

在C++中,<map> 头文件提供了一种关联容器,它存储的是键值对(std::pair),并且会自动根据键进行排序。以下是一些常用的 map 函数及其使用方式:

  1. 插入元素insert(const value_type& val)insert(initializer_list init) 用于插入元素。

    std::map<int, std::string> myMap;
    myMap.insert(std::make_pair(1, "one"));
    myMap.insert({2, "two", 3, "three"});
    
  2. 访问元素at(const Key& key) 返回键对应值的引用,如果键不存在则抛出异常。

    std::string value = myMap.at(2); // "two"
    
  3. 查找元素find(const Key& key) 返回一个指向找到元素的迭代器,如果没有找到则返回 end()

    auto it = myMap.find(2);
    if (it != myMap.end()) {
        std::cout << it->second << std::endl; // 输出 "two"
    }
    
  4. 删除元素erase(Iterator pos)erase(const Key& key) 用于删除元素。

    myMap.erase(2); // 删除键为2的元素
    
  5. 获取元素数量size() 返回 map 中元素的数量。

    std::cout << "Size: " << myMap.size() << std::endl;
    
  6. 清空容器clear() 移除所有元素。

    myMap.clear();
    
  7. 检查容器是否为空empty() 检查 map 是否为空。

    if (myMap.empty()) {
        std::cout << "The map is empty." << std::endl;
    }
    
  8. 获取迭代器begin()end() 分别返回指向第一个元素和最后一个元素之后的迭代器。

    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        std::cout << it->first << " => " << it->second << std::endl;
    }
    
  9. 获取键的总数count(const Key& key) 返回键在 map 中出现的次数。

    std::cout << "Count of key 2: " << myMap.count(2) << std::endl;
    
  10. 获取键值对的范围equal_range(const Key& key) 返回一个包含两个迭代器的 pair,分别指向键值对的范围的开始和结束。

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


在竞赛过程中,使用 `map` 的细节包括:

- **性能**:`map` 的插入、删除和查找操作的时间复杂度为 O(log n),其中 n 是 `map` 中元素的数量。
- **内存使用**:`map` 可能需要比数组或向量更多的内存,因为它需要存储额外的信息来维护元素的排序。
- **迭代器失效**:在对 `map` 进行插入或删除操作后,之前的所有迭代器可能会失效,需要重新获取迭代器。
- **元素唯一性**:`map` 中的键必须是唯一的,尝试插入重复的键将不会成功。

以上是 `<map>` 头文件中一些常用函数的介绍,以及在竞赛编程中的使用细节。在实际编程中,应根据具体需求选择合适的容器和操作。

标签:std,map,头文件,cout,迭代,元素,C++,myMap
From: https://blog.csdn.net/2301_80215285/article/details/144993829

相关文章

  • Vuex mapState和mapGetters
    一、作用生成计算属性,简化模版{{xx}}xx的写法,原因xx在vuex中写法麻烦$store.state.x或$store.getters.x二、步骤1、引入import{mapState,mapGetters}from'vuex'2、语法computed:{//借助mapState生成计算属性namesum对象写法//...mapState({name:"na......
  • C++编程基础:类型转换四式速记const_cast,dynamic_cast,reinterpret_cast,static_cast
    C++编程就应该使用C++风格的转换,不要再使用不安全的C风格的转换方法了。这里先给一个C++编程风格的类型转换四式速记打油诗,帮大家记忆其用法:C++强制转换妙,四类各有其诀窍。const_cast用途巧,常量限制可取消,const属性轻松搞,函数参数常需要。dynamic_cast专长显,继承体系......
  • Map Navigation System (Graph Algorithm)
    1.实验目的为了更好地理解图数据结构,例如最短路径算法和最小生成树算法。2.实验代码思路及算法复杂度分析Graph类:记录图的顶点,边等信息//GraphNoderecordGraphNode(intv,doubleweight){}​//EdgerecordGraphEdge(ints,intd,doubleweight){}​publiccl......
  • 在 C++ 中优雅地处理 JSON:nlohmann/json 库实践指南
    JSON(JavaScriptObjectNotation)作为一种轻量级的数据交换格式,在现代软件开发中扮演着重要角色。在C++开发中,nlohmann/json库因其易用性和灵活性而广受欢迎。本文将通过实例介绍如何使用这个强大的库进行JSON数据的序列化和反序列化操作。环境准备首先,我们需要配置项目......
  • DirectX 修复工具 V4.3 绿色增强版:完美解决 DirectX 和 C++ 问题,修复 0xc000007b 错误
    介绍DirectX修复工具V4.3是一款高效的系统修复工具,专为解决系统异常和C++运行库问题而设计,尤其对解决0xc000007b错误有着极高的修复率。本工具支持对所有版本的DirectX进行修复,并在增强版中新增了对C++运行库问题的修复,提供了一个全面且可靠的解决方案。主要功能......
  • libfacedetection人脸检测C++代码实现Demo
    目录1简介2如何编译3注意事项4接口说明5演示Demo5.1开发环境5.2功能介绍5.3下载地址1简介        libfacedetection是一个基于CNN的人脸检测的开源库。CNN模型已在C源文件中转换为stasticvariales。源代码不依赖于任何其他库。你需要的只是一个......
  • 《 C++ 点滴漫谈: 十八 》写出无懈可击的代码:全面解析 C++ 的 explicit 和 implicit 显
    摘要在C++中,隐式和显式转换是程序设计中至关重要的概念,而关键字explicit则是掌控这一机制的核心工具。本文从基础概念出发,全面解析explicit和隐式转换的关系,深入探讨它们在构造函数、防止隐式类型转换错误等场景中的应用。通过对比分析隐式与显式的优缺点,以及C++11......
  • C++ Qt练习项目 QSpinBox和QDoubleSpinBos 未完待续
    个人学习笔记新建项目设计UI......
  • Jetbrains fleet 配置 C++开发环境(基于CMAKE和MinGW)
    Jetbrainsfleet配置C++开发环境1.安装JetbrainsFleet到Fleet下载页面下载Toolbox并安装Jetbrains-Fleet下载页安装完成后在任务栏打开Toolbox,在列表中选择安装fleet。2.为Fleet准备Workspace在适当的地方建立文件夹作为fleet的工作空间,并在fleet中打开。3......
  • 超级好用的C++实用库之服务包装类
    在C++开发中,服务包装类库是非常重要且实用的工具。它们可以显著简化代码编写,提高开发效率和代码可维护性。以下是几个超级好用的C++服务包装类库,以及如何使用它们来优化开发工作。常用的C++服务包装类库1.Boost.AsioBoost.Asio是一个跨平台的C++网络编程库,用于实现异步I/O操作......