Multimap的用法详解 VSSW • 2024-10-11 11:41 • 编程 一、基本介绍 Multimap是C++标准库中的容器之一,是一种关联式容器,其中动态存储数据,并能够根据键值对数据进行快速访问。与普通的Map不同的是,Multimap中可以同时存在相同的键值。Multimap使用二叉搜索树实现,比较的依据是键值对的比较结果。 一个Multimap包含了很多键值对,其中每一个键值对可以看作是一个节点。可以使用关键字来查找值。关键字可以有重复值,也就是说多个键值对可以有相同的关键字。值可以被修改,但是键不会被修改。Multimap模板定义在头文件 中。 #include <iostream> #include <map> int main() { std::multimap mymm; mymm.insert(std::pair('x',10)); mymm.insert(std::pair('y',20)); mymm.insert(std::pair('z',30)); mymm.insert(std::pair('z',40)); mymm.insert(std::pair('z',50)); std::cout << "mymm contains:\n"; for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 二、插入元素 Multimap支持两种插入元素的方式——insert和emplace。其中,insert接受一个键值对作为参数,如果Multimap中已经存在相同的键,则插入新值,如果不存在,则插入整个键值对。emplace则直接接受键和值,然后在Multimap中进行排序并插入。 除了上述两种方法,Multimap还可以通过直接访问其迭代器来进行插入操作。 使用insert进行插入操作: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.insert(std::pair<char,int>('a',10)); mymm.insert(std::pair<char,int>('b',20)); mymm.insert(std::pair<char,int>('c',30)); for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 使用emplace进行插入操作: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 使用迭代器进行插入操作: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; auto it = mymm.emplace('a',10); mymm.emplace_hint(it,'b',20); mymm.emplace_hint(mymm.end(),'c',30); for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 三、查找元素 Multimap支持多种查找元素的方式,其中find、count、equal_range和lower_bound是比较常用的。其中,find接受一个键,返回Multimap中指向对应元素的迭代器。如果Multimap中不存在该键,则返回Multimap的end迭代器。count接受一个键,返回Multimap中该键对应元素的个数。equal_range则返回一个pair对象,其中first是指向Multimap中首个匹配元素的迭代器,second是指向Multimap中最后一个匹配元素之后的迭代器。lower_bound也返回与当前键匹配的第一个元素的迭代器。 使用find查找元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); auto it = mymm.find('b'); std::cout << "Key found: " << it->first << " = " << it->second << '\n'; return 0; } 使用count查找元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); int count = mymm.count('b'); std::cout << "Number of values with key 'b': " << count << '\n'; return 0; } 使用equal_range查找元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); auto range = mymm.equal_range('b'); for (auto it = range.first; it != range.second; it++) std::cout << it->first << " => " << it->second << '\n'; return 0; } 使用lower_bound查找元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); auto it = mymm.lower_bound('b'); std::cout << "Key found: " << it->first << " = " << it->second << '\n'; return 0; } 四、删除元素 与插入元素类似,Multimap支持多种删除元素的方式,其中erase接受一个元素的迭代器,删除对应的元素。remove则接受一个键,删除该键对应的所有元素。 使用erase删除元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); auto it = mymm.find('b'); mymm.erase(it); for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 使用remove删除元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); mymm.emplace('b',40); mymm.erase('b'); for (auto elem : mymm) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 五、其他操作 Multimap支持许多其他的操作,包括size(返回Multimap中元素的数量)、empty(如果Multimap为空则返回true)、swap(交换两个Multimap中的元素)、clear(清除Multimap中的所有元素)等。 使用size获取Multimap中元素数量: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); std::cout << "The size of the Multimap is " << mymm.size() << '\n'; return 0; } 使用empty判断Multimap是否为空: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; std::cout << "The Multimap is " << (mymm.empty() ? "empty" : "not empty") << '\n'; return 0; } 使用swap交换两个Multimap中的元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm1; std::multimap<char,int> mymm2; mymm1.emplace('a',10); mymm1.emplace('b',20); mymm1.emplace('c',30); mymm2.emplace('x',40); mymm2.emplace('y',50); mymm1.swap(mymm2); for (auto elem : mymm2) std::cout << elem.first << " => " << elem.second << '\n'; return 0; } 使用clear清除Multimap中的所有元素: #include <iostream> #include <map> int main() { std::multimap<char,int> mymm; mymm.emplace('a',10); mymm.emplace('b',20); mymm.emplace('c',30); mymm.clear(); std::cout << "The Multimap is " << (mymm.empty() ? "empty" : "not empty") << '\n'; return 0; } 原创文章,作者:VSSW,如若转载,请注明出处:https://www.506064.com/n/142409.html Multimap详解 赞 (0) 打赏 微信扫一扫 支付宝扫一扫 VSSW 0 生成海报 ios支持jsp么,ios打开jsp 上一篇 2024-10-11 11:41 Sql正则表达式全面解析 下一篇 2024-10-11 11:41 相关推荐 Linux sync详解 一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存… 编程 2025-04-25 神经网络代码详解 神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网… 编程 2025-04-25 Java BigDecimal 精度详解 一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci… 编程 2025-04-25 Python输入输出详解 一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件… 编程 2025-04-25 Python安装OS库详解 一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目… 编程 2025-04-25 git config user.name的详解 一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi… 编程 2025-04-25 nginx与apache应用开发详解 一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web… 编程 2025-04-25 MPU6050工作原理详解 一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其… 编程 2025-04-25 详解eclipse设置 一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择… 编程 2025-04-25 Linux修改文件名命令详解 在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命… 编程 2025-04-25 发表回复 请登录后评论...登录后才能评论 提交