首页 > 编程语言 >c++ map用法

c++ map用法

时间:2024-11-06 23:33:42浏览次数:3  
标签:std map 元素 c++ 用法 插入 myMap Banana

std::map 是C++标准库中的一个关联容器,用于存储键值对(key-value pairs)。它的特性和用途如下:

  1. 键值对存储std::map 是一种关联容器,每个元素都由一个唯一的键(key)和一个值(value)组成。键用于标识数据的唯一性,值是与键相关联的数据。

    std::map<int, std::string> myMap;
    myMap[1] = "Apple";
    myMap[2] = "Banana";
    
  2. 有序性std::map 自动按照键的升序排序存储元素,因此每次插入新元素时,元素会根据键的排序规则(默认使用operator<)放入适当位置。

  3. 键的唯一性:在 std::map 中,每个键都是唯一的,重复的键不会插入。如果尝试插入具有相同键的元素,新的值会覆盖原来的值。

  4. 底层实现std::map 通常基于红黑树等自平衡二叉搜索树实现,因此查找、插入和删除操作的时间复杂度为 (O(\log n)),适合频繁查找和排序的场景。

  5. 常用操作

    • 插入元素:使用 insert()operator[]、或 emplace() 方法。
    • 访问元素:使用 operator[] 或 at() 方法。
    • 查找元素:使用 find() 方法。
    • 删除元素:使用 erase() 方法。

例子

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

int main() {
    std::map<int, std::string> myMap;

    // 插入元素
    myMap[1] = "Apple";
    myMap[3] = "Cherry";
    myMap[2] = "Banana";

    // 遍历并输出元素
    for (const auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 查找元素
    auto it = myMap.find(2);
    if (it != myMap.end()) {
        std::cout << "Found: " << it->second << std::endl;
    }

    return 0;
}

输出结果

1: Apple
2: Banana
3: Cherry
Found: Banana

在此例子中,myMap 中的元素根据键值自动排序,因此遍历时按键的升序输出。

标签:std,map,元素,c++,用法,插入,myMap,Banana
From: https://www.cnblogs.com/chentiao/p/18531255

相关文章

  • c++ noexcept用法
    noexcept 是C++中的一种关键字,用于指定一个函数在执行时不会抛出异常。这一关键字可以提高代码的安全性,并允许编译器进行额外的优化。具体来说:函数不会抛出异常:当一个函数被声明为 noexcept 时,表示该函数在任何情况下都不会抛出异常。如果函数实际抛出异常,将导致程序直接调......
  • c++final用法
    在C++中,classJsonfinal 的 final 关键字用于防止该类被继承,表示 Json 是一个最终类,不能被其他类继承。具体来说:final 关键字:当在类定义后添加 final 时,编译器会确保没有其他类可以继承这个类。如果尝试继承它,将导致编译错误。例如:classJsonfinal{//类的定......
  • **BMP(Bitmap)**是一种图像文件格式,通常用于存储位图图像。它是最早期的图像格式之一,最
    **BMP(Bitmap)**是一种图像文件格式,通常用于存储位图图像。它是最早期的图像格式之一,最早由微软在Windows操作系统中引入。BMP格式的文件扩展名通常为.bmp,它用于表示由像素网格组成的图像,像素数据存储在文件中,通常没有压缩,因此能够保存原始的图像数据。1. BMP图片格式是什么?......
  • c++中::的用法
    kernel::Module 这种用法表明 Module 是位于 kernel 命名空间或命名模块中的一个类型或对象。在C++中,这样的用法用于访问特定命名空间下的类、结构体、函数或其他成员。以下是一些可能的情况,取决于上下文:命名空间(Namespace):如果 kernel 是一个命名空间(通常在C++中是这......
  • C++ 在模板三个阶段检查错误
    第一个阶段是编译模板本身时。在这个阶段,编译器通常不会发现很多错误。编译器可以检查语法错误,例如忘记分号或者变量名拼错等,但也就这么多了。第二个阶段是编译器遇到模板使用时。在此阶段,编译器仍然没有很多可检查的。对于函数模板调用,编译器通常会检查实参数目是否正确。它还能......
  • C++智能指针
    C++智能指针以引用计数为基础的智能指针,引用计数的管理逻辑如下:除了初始化对象本身外,每个构造函数(拷贝构造函数除外)还要在堆上创建一个引用计数,用来记录有多少个对象共享状态。当我们创建一个对象时,只有一个对象共享状态,因此将引用计数初始化为1;拷贝构造函数不分配新的计数器......
  • C/C++中的volatile
    C/C++中的volatile约定Volatile这个话题,涉及到计算机科学多个领域多个层次的诸多细节。仅靠一篇博客,很难穷尽这些细节。因此,若不对讨论范围做一些约定,很容易就有诸多漏洞。到时误人子弟,就不好了。以下是一些基本的约定:1这篇博文讨论的volatile关键字,是C和C++语言中的......
  • c++蠕虫文学
    c++犹如蠕虫一样侵蚀你的大脑一起来看看    一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?   这里要求不足......
  • C++手撕 --基本数据结构的简单实现(2)
    C++面试手撕代码----基本数据结构的简单实现(2)1.哈希表(unordered_map):#include<vector>#include<iostream>#include<list>//forlist#include<utility>//forpair#include<functional>//forstd::hashusingnamespacestd;template<typ......
  • LevelDB 源码中的 C++ 奇淫技巧
    LevelDB整体代码还是比较好懂,没有用很多C++奇淫技巧。不过还是有部分实现,相当比较少见,比如柔性数组、链接符号导出、Pimpl类设计等。本文会梳理这里的C++高级技巧,帮助更好地理解LevelDB的实现。柔性数组在util/cache.cc的LRUHandle结构体定义中,有一个柔性数组(fl......