「C/C++」C++ STL容器库 之 std::multimap 键值对的集合容器

news2024/10/26 22:36:26

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

    • std::multimap容器详解
      • 1. 引用头文件
      • 2. 注意事项
      • 3. 函数构造与对象初始化
      • 4. 元素访问
      • 5. 迭代器
      • 6. 容器
      • 7. 修改器
      • 8. 元素比较
      • 代码示例
      • 总结与应用场景

std::multimap容器详解

1. 引用头文件

在C++中,std::multimap是标准模板库(STL)中的一个关联容器,它存储键值对(key-value pairs),并且允许键的重复。要使用std::multimap,首先需要包含相应的头文件:

#include <map>

2. 注意事项

  • 有序性std::multimap是一个有序集合容器,它根据元素的键值自动进行排序。
  • 重复元素:与std::map不同,std::multimap允许存储重复的元素。
  • 空间消耗:由于std::multimap使用红黑树作为内部数据结构,相对于其他简单的数据结构(如数组或链表),其空间消耗可能会稍高一些。
  • 查找与删除:由于允许键的重复,在进行查找和删除操作时,需要注意可能会有多个元素匹配同一个键。

3. 函数构造与对象初始化

std::multimap类模板提供了多个构造函数,用于创建和初始化multimap对象。

// 默认构造函数:创建一个空的multimap容器。
std::multimap<int, std::string> mmap;

// 初始化列表:在创建multimap的同时进行初始化。
std::multimap<int, std::string> mmap{{1, "one"}, {2, "two"}, {1, "uno"}};

// 拷贝构造函数:通过已有的multimap对象来初始化新的multimap对象。
std::multimap<int, std::string> mmap2(mmap);

// 自定义排序:通过提供自定义的比较函数来修改multimap内部的排序规则。
std::multimap<int, std::string, std::greater<int>> mmap3{{1, "one"}, {2, "two"}};

4. 元素访问

在这里插入图片描述

std::multimap提供了多种方式来访问其元素,包括迭代器、范围for循环等。

5. 迭代器

在这里插入图片描述

std::multimap的迭代器提供了对容器中元素的顺序访问。迭代器类型包括正向迭代器和逆向迭代器。

  • 正向迭代器
auto it = mmap.begin();
while (it != mmap.end()) {
    // 访问元素
    ++it;
}
  • 逆向迭代器
auto rit = mmap.rbegin();
while (rit != mmap.rend()) {
    // 访问元素
    ++rit;
}
  • for循环迭代器
for (auto it = mmap.begin(); it != mmap.end(); ++it) {
    std::cout << it->first << " " << it->second << std::endl;
}

6. 容器

在这里插入图片描述

std::multimap作为关联容器,具有一些特定的成员函数来管理其容量和状态。

  • size():返回容器中元素的个数。
std::cout << mmap.size() << std::endl;
  • empty():如果multimap为空,则返回true。
if (mmap.empty()) {
    std::cout << "Multimap is empty" << std::endl;
}
  • max_size():返回容器可以容纳的最大元素个数。
std::cout << mmap.max_size() << std::endl;

7. 修改器

在这里插入图片描述

std::multimap提供了多种成员函数来插入、删除和修改元素。

  • insert():插入元素。
mmap.insert({3, "three"});
  • erase():删除元素。
mmap.erase(1); // 删除所有键为1的元素
  • swap():交换两个multimap的内容。
std::multimap<int, std::string> mmap2;
mmap.swap(mmap2);

8. 元素比较

在这里插入图片描述

std::multimap使用比较函数来确定元素的顺序和等价性。默认情况下,使用std::less进行升序排序。

  • key_comp():返回用于比较键的函数。
auto comp = mmap.key_comp();
  • value_comp():返回用于比较元素值的函数。
auto val_comp = mmap.value_comp();

代码示例

以下是一个完整的代码示例,展示了如何创建、初始化和操作std::multimap对象。

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

int main() {
    // 创建并初始化multimap对象
    std::multimap<int, std::string> mmap{{1, "one"}, {2, "two"}, {1, "uno"}};

    // 插入元素
    mmap.insert({3, "three"});

    // 访问元素
    for (auto& elem : mmap) {
        std::cout << elem.first << " " << elem.second << std::endl;
    }

    // 删除元素
    mmap.erase(1);

    // 再次访问元素
    std::cout << "After erasing key 1:" << std::endl;
    for (auto& elem : mmap) {
        std::cout << elem.first << " " << elem.second << std::endl;
    }

    return 0;
}

总结与应用场景

std::multimap是一个有序的关联容器,它允许存储具有相同键的多个元素。其内部实现通常基于红黑树,保证了元素按照键的顺序进行存储和检索。std::multimap在需要存储键值对且允许键重复的场景下非常有用,例如:

  • 电话簿:相同的人可以有两个以上电话号码。
  • 文件系统:可以将多个符号链接映射到相同的物理文件。
  • DNS服务器:可以将几个URL映射到相同的IP地址。

通过std::multimap,可以高效地管理这些具有重复键的数据,实现快速的查找、插入和删除操作。


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

化验单智能识别与数据抽取:AI平台赋能医疗信息化

化验单处理在医院日常运作中常遇信息量大、数据整理不易、效率低的问题。思通数科推出的AI多模态平台&#xff0c;借助光学字符识别&#xff08;OCR&#xff09;、图像处理等技术&#xff0c;提供了一款开源化验单智能识别系统&#xff0c;能迅速识别、提取和分析化验单数据。 …

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

10.22.2024刷华为OD C题型(三)--for循环例子

脚踝动了手术&#xff0c;现在宾馆恢复&#xff0c;伤筋动骨一百天还真不是说笑的&#xff0c;继续努力吧。 文章目录 靠谱的车灰度图恢复灰度图恢复 -- for循环使用例子 靠谱的车 https://www.nowcoder.com/discuss/564514429228834816 这个题目思路不难&#xff0c;就是要自…

网络一些相关术语

目录 网络一些相关术语 转发平面效率 可扩展性 控制平面 网络拓扑 服务质量&#xff08;QoS&#xff09; 网络协议 网络带宽 网络拥塞 网络安全 网络冗余 网络切片 网络延迟 网络地址转换&#xff08;NAT&#xff09; 虚拟专用网络&#xff08;VPN&#xff09; …

C#中的接口的使用

定义接口 public interface IMyInterface {int MyProperty { get; set; }void MyMethod(); } 实现类 internal class MyClass : IMyInterface {public int MyProperty { get; set; }public void MyMethod(){Console.WriteLine("MyMethod is called");} } 目录结构…

每天一题:洛谷P2041分裂游戏

题目描述 有一个无限大的棋盘&#xff0c;棋盘左下角有一个大小为 n 的阶梯形区域&#xff0c;其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子&#xff0c;分别放在原位置的上边一格和右边一格。&#xff08;但如果目标位置已有棋子&#xff0c…

《人脸表情识别可解释性研究综述(计算机学报)》

文章全面综述了**人脸表情识别&#xff08;FER&#xff09;**领域的可解释性研究&#xff0c;探讨了表情识别的基本概念、技术方法和研究进展&#xff0c;并重点介绍了可解释性研究的重要性以及提高模型可解释性的方法&#xff0c;如模型的可视化和简化等。 论文内容概述&…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

基于SSM考研助手系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教学秘书管理&#xff0c;考研资讯管理&#xff0c;考研名师管理&#xff0c;考研信息管理&#xff0c;系统管理 教学秘书账号功能包括&#xff1a;系统首页&#xff0c;个人中心…

如何加密电脑磁盘?电脑本地磁盘加密方法介绍

随着信息技术的不断发展&#xff0c;电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法&#xff0c;帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹&#xff0c;还可以加密保…

JMeter快速入门示例

JMeter是一款开源的性能测试工具&#xff0c;常用于对Web服务和接口进行性能测试。 下载安装 官方下载网址&#xff1a; https://jmeter.apache.org/download_jmeter.cgi也可以到如下地址下载&#xff1a;https://download.csdn.net/download/oscar999/89910834 这里下载Wi…

docker run 命令解析

docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项&#xff0c;下面是一些常用的选项&#xff1a; -d&#xff1a;后台运行容器&#xff0c;并返回容器ID&#xff1b;-i&#xff1a;以交互模式运行容器&#xff0c;通常与 -t …

leetcode动态规划(十七)-组合总和IV

题目 377.组合总和IV 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target 4 输出&a…

告别接口困扰,LDR6020芯片打造USB-C显示器智能新选择!

随着USB TYPE-C接口技术的广泛普及和USB4标准的崭新推出&#xff0c;传统HDMI与DisplayPort接口的主导地位正悄然受到挑战。USB TYPE-C接口凭借其小巧的体积、高速的传输速度以及丰富的功能特性&#xff0c;正逐步成为显示器与电视机接口的首选。本文旨在深入探讨如何设计基于U…

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法 文章目录 【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法1. 论文信息2. 算法介绍3. 创新点小结4. 实验效果5. 算法结论6. 代码实现7. 问题及优化方向1. 冷启动问题2. 稀…

node集成redis (教学)

文章目录 前言一、安装redis二、可视化界面测试连接1.vscode安装插件 三、node代码编写1.先安装两个库&#xff08;redis和ioredis&#xff09;2.测试连接 &#xff08;前提是你的redis服务器要启动起来&#xff09; 总结 前言 在Node.js中集成ioredis是一个常见的做法&#x…

最新PHP网盘搜索引擎系统源码 附教程

最新PHP网盘搜索引擎系统源码 附教程&#xff0c;这是一个基于thinkphp5.1MySQL开发的网盘搜索引擎&#xff0c;可以批量导入各大网盘链接&#xff0c;例如百度网盘、阿里云盘、夸克网盘等。 功能特点&#xff1a;网盘失效检测&#xff0c;后台管理功能&#xff0c;网盘链接管…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…

C2W4.LAB.Word_Embedding.Part2

理论课&#xff1a;C2W4.Word Embeddings with Neural Networks 文章目录 Training the CBOW modelForward propagationInitialization of the weights and biasesTraining exampleValues of the hidden layerValues of the output layerCross-entropy loss BackpropagationGr…

121页PPT | 集团股份有限公司IT信息化规划报告

这份PPT是集团股份有限公司的IT信息化规划报告&#xff0c;全面涵盖了公司在信息化建设方面的需求分析、规划实施、投资概算以及建议方案&#xff0c;通过现代化信息技术提升企业的管理效率和市场竞争力。 该资料可编辑PPT格式&#xff0c;本文重点展现PPT整体逻辑&#xff0c…