第十三篇:multimap容器和multiset容器中的find操作
前言
multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值。对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器。那么对于multimap容器来说,find函数将如何运作呢?如果要实现和map容器的find函数同样的功能,则它将返回多个迭代器,这样太复杂了。本文将讲解C++中multimap容器的“ find实现 ”。
解决思路一
摒弃find函数,使用另外两个新函数,它们是专家们为了解决multimap中的“ find操作 ”问题专门设计的:
1. lower_bound():返回一个迭代器,指向键不小于k的第一个元素。
2. upper_bound():返回一个迭代器,指向键大于k的第一个元素。
代码示例
下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:
1 #include <iostream> 2 #include <map> 3 #include <string> 4 5 using namespace std; 6 7 int main() 8 { 9 multimap<string, string> book; 10 11 /* 12 * multimap容器是不支持下标操作的,因为没有实际意义。 13 * 故我们采取调用insert函数的方法给容器赋值。 14 */ 15 book.insert(make_pair("金庸", "倚天屠龙记")); 16 book.insert(make_pair("金庸", "射雕英雄传")); 17 book.insert(make_pair("金庸", "笑傲江湖")); 18 book.insert(make_pair("古龙", "楚留香传奇")); 19 book.insert(make_pair("古龙", "陆小凤传奇")); 20 book.insert(make_pair("黄易", "边荒传说")); 21 22 /* 23 * 使用lower_bound()和upper_bound()获取指向键值匹配元素下界和上界的迭代器 24 */ 25 multimap<string, string>::iterator bookit1, bookit2; 26 bookit1 = book.lower_bound("古龙"); 27 bookit2 = book.upper_bound("古龙"); 28 29 /* 30 * 打印检索结果 31 */ 32 cout << "作者: " << bookit1->first << endl << "书名:" << endl; 33 while (bookit1 != bookit2) { 34 cout << bookit1->second << " "; 35 bookit1++; 36 } 37 cout << endl; 38 39 return 0; 40 }
运行结果:
解决思路二
依然摒弃find函数,使用equal函数。它也是专家们为了解决multimap中的“ find操作 ”问题专门设计的。它返回的是一个pair对象,其first成员返回指向匹配元素上界的迭代器,second成员则返回指向匹配元素下界的迭代器。
代码示例
和解决思路一代码示例一样,下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:
1 #include <iostream> 2 #include <map> 3 #include <utility> 4 #include <string> 5 6 using namespace std; 7 8 int main() 9 { 10 multimap<string, string> book; 11 12 /* 13 * multimap容器是不支持下标操作的,因为没有实际意义。 14 * 故我们采取调用insert函数的方法给容器赋值。 15 */ 16 book.insert(make_pair("金庸", "倚天屠龙记")); 17 book.insert(make_pair("金庸", "射雕英雄传")); 18 book.insert(make_pair("金庸", "笑傲江湖")); 19 book.insert(make_pair("古龙", "楚留香传奇")); 20 book.insert(make_pair("古龙", "陆小凤传奇")); 21 book.insert(make_pair("黄易", "边荒传说")); 22 23 /* 24 * 使用equal_range函数获取指向键值匹配元素下界和上界的迭代器 25 */ 26 typedef multimap<string, string>::iterator bookit; 27 pair<bookit, bookit> p = book.equal_range("古龙"); 28 29 /* 30 * 打印检索结果 31 */ 32 cout << "作者: " << p.first->first << endl << "书名:" << endl; 33 while (p.first != p.second) { 34 cout << p.first->second << " "; 35 p.first++; 36 } 37 cout << endl; 38 39 return 0; 40 }
运行结果:
说明
multiset容器的find实现问题同样可以使用本文所提供的两种方法。
第十三篇:multimap容器和multiset容器中的find操作相关推荐
- c++中的set容器和multiset容器
set容器基本概念 set的特性是,所有元素都会根据元素的键值自动被排序.set的元素不像map那样可以同时拥有实值和键值,set的元素即是键值又是实值.set不允许两个元素又相同的键值. 我们不可以 ...
- c++STL标准模板库(关联式容器(set,multiset容器))
关联式容器(associate容器)是STL提供的容器的一种,其中元素与序列容器不同的是它已经排过序,它主要通过关键字的方式来提高查询效率.关联式容器包含set.multiset.map.multim ...
- 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】
[C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...
- 『中级篇』docker之wordpress容器SSL(番外篇)(78)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之wordpress容器SSL(番外篇)(78) 搞了2天终于搞定了,现在分享给大家. apache2 ...
- set和multiset容器
1 set和multiset容器的能力 set 和multiset容器的内部结构通常由平衡二叉树(balancedbinary tree)来实现.当元素放入容器中时,会按照一定的排序法则自动排序,默认 ...
- set和multiset容器简介
set和multiset容器简介 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年06月20日 set 是一个集合容器,其中所包含的元素是唯一的,集合中的元素按 ...
- C++STL的set/ multiset容器
C++STL的set/ multiset容器 set基本概念 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序 set基本概念 简介 ...
- 深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器
深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器 思维导图总览 这篇推送主要讲servlet的规范和什么是servlet容器? 1.先来讲讲servlet规范: 2. ...
- set/multiset容器
所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器,底层结构是用二叉树实现 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复 ...
最新文章
- php 修改文件的权限_php怎么修改文件的权限?
- 励志!送女儿去厦大读研后,爸爸回家就考了厦大的博士,现在是女儿的“学弟”...
- 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
- vue todolist
- linux基本命令du,Linux常用操作命令汇总
- 你觉得你有那些特质让你比别人更适合做产品经理?
- 全栈工程师已经过时?
- Idea中Spring整合MyBatis框架中配置文件中对象注入问题解决方案
- 基础编程题目集 6-13 折半查找 (15 分)
- 嘉年华回顾丨 尚博带你了解腾讯 TXSQL如何 赋能腾讯云分布式数据库 CynosDB
- python解决数据不均衡,上采样方法解决
- 清空文件夹,或删除文件夹
- 教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
- %@ include file=和jsp:include file=区别
- 目录 1.1. JVM内存模型总体架构图	1 1.2. JAVA堆	2 1.3. 方法区 元空间(Metaspace)	2 1.4. 虚拟机栈	3 1.5. 本地方法区	4 2. 垃圾回收算法	4 2
- 开发比软件测试好吗,前端开发比软件测试发展好吗?
- 如何使用Excel的数据去查询数据库?
- Revit导入lumion渲染
- 台式计算机搜索不到无线信号,win7电脑搜不到无线信号怎么办_win7找不到无线网络怎么解决-win7之家...
- 10大最毒路边小吃盘点,你常吃吗?
热门文章
- Android 无法查看外部依赖jar的源码的问题
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- 车牌识别EasyPR(4)——字符识别MSER
- android 循环弹幕,Android中如何动态获取弹幕内容
- 7-2 合并两个有序数组为新的有序数组 (15 分)
- 剑指offer-JZ30 包含min函数的栈(C++,附自己的分析)
- python中str函数isdigit、isdecimal、isnumeric的区别
- 数据库(5)SQL约束
- linux防火墙测试,构建基于ipchains的Linux防火墙
- html怎么设置字体竖直,CSS3 writing-mode 控制字体竖直显示