前言

multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值。对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器。那么对于multimap容器来说,find函数将如何运作呢?如果要实现和map容器的find函数同样的功能,则它将返回多个迭代器,这样太复杂了。本文将讲解C++中multimap容器的“ find实现 ”。

解决思路一

摒弃find函数,使用另外两个新函数,它们是专家们为了解决multimap中的“ find操作 ”问题专门设计的:

1. lower_bound():返回一个迭代器,指向键不小于k的第一个元素。

2. upper_bound():返回一个迭代器,指向键大于k的第一个元素。

代码示例

  下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:

 #include <iostream>
#include <map>
#include <string> using namespace std; int main()
{
multimap<string, string> book; /*
* multimap容器是不支持下标操作的,因为没有实际意义。
* 故我们采取调用insert函数的方法给容器赋值。
*/
book.insert(make_pair("金庸", "倚天屠龙记"));
book.insert(make_pair("金庸", "射雕英雄传"));
book.insert(make_pair("金庸", "笑傲江湖"));
book.insert(make_pair("古龙", "楚留香传奇"));
book.insert(make_pair("古龙", "陆小凤传奇"));
book.insert(make_pair("黄易", "边荒传说")); /*
* 使用lower_bound()和upper_bound()获取指向键值匹配元素下界和上界的迭代器
*/
multimap<string, string>::iterator bookit1, bookit2;
bookit1 = book.lower_bound("古龙");
bookit2 = book.upper_bound("古龙"); /*
* 打印检索结果
*/
cout << "作者: " << bookit1->first << endl << "书名:" << endl;
while (bookit1 != bookit2) {
cout << bookit1->second << " ";
bookit1++;
}
cout << endl; return ;
}

运行结果:

  

解决思路二

  依然摒弃find函数,使用equal函数。它也是专家们为了解决multimap中的“ find操作 ”问题专门设计的。它返回的是一个pair对象,其first成员返回指向匹配元素上界的迭代器,second成员则返回指向匹配元素下界的迭代器。

代码示例

和解决思路一代码示例一样,下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:

 #include <iostream>
#include <map>
#include <utility>
#include <string> using namespace std; int main()
{
multimap<string, string> book; /*
* multimap容器是不支持下标操作的,因为没有实际意义。
* 故我们采取调用insert函数的方法给容器赋值。
*/
book.insert(make_pair("金庸", "倚天屠龙记"));
book.insert(make_pair("金庸", "射雕英雄传"));
book.insert(make_pair("金庸", "笑傲江湖"));
book.insert(make_pair("古龙", "楚留香传奇"));
book.insert(make_pair("古龙", "陆小凤传奇"));
book.insert(make_pair("黄易", "边荒传说")); /*
* 使用equal_range函数获取指向键值匹配元素下界和上界的迭代器
*/
typedef multimap<string, string>::iterator bookit;
pair<bookit, bookit> p = book.equal_range("古龙"); /*
* 打印检索结果
*/
cout << "作者: " << p.first->first << endl << "书名:" << endl;
while (p.first != p.second) {
cout << p.first->second << " ";
p.first++;
}
cout << endl; return ;
}

运行结果:

说明

multiset容器的find实现问题同样可以使用本文所提供的两种方法。

第十三篇:multimap容器和multiset容器中的find操作的更多相关文章

  1. multimap容器和multiset容器中的find操作

    前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数 ...

  2. 详解C++ STL multiset 容器

    详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...

  3. STL学习系列八:Set和multiset容器

    1.set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实 ...

  4. STL之Set和multiset容器

    1.Set和multiset容器 1)set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. 2)set采用红黑树变体的数据 ...

  5. C++ STL 学习笔记__(7)Set和multiset容器

    10.2.8 Set和multiset容器 set/multiset的简介 ²  set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指 ...

  6. STL Set和multiset 容器

    STL Set和multiset 容器 set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列. 元素插入过程是按排序规则插入,所以不能指定插入位 ...

  7. set和multiset容器

    set和multiset容器的能力 set 和multiset容器的内部结构通常由平衡二叉树(balanced binary tree)来实现.当元素放入容器中时,会按照一定的排序法则自动排序,默认是 ...

  8. stl之multiset容器的应用

    与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上 ...

  9. multiset容器erase函数的误用

    <从缺陷中学习C/C++>第3章库函数问题,本章主要介绍库函数的使用中会遇到的问题.使用库函数可以降低软件开发的难度,提高代码编写的效率.本节为大家介绍multiset容器erase函数的 ...

随机推荐

  1. java异常处理Exception

    我看别人的面经中有一道题目就问到了Exception,即java的异常处理的,我曾经也学了java的异常处理,可是我查了下,看了别人的博客关于写的exception异常处理.我发现,自己学的不坚固,仅 ...

  2. Redis主从配置及通过Keepalived实现Redis自动切换高可用

    Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区  作者:fuquanjun [字体:大 中 小]   一:环境介绍: M ...

  3. Tomcat、Websphere和Jboss类加载机制

    http://blog.csdn.net/lshxy320/article/details/6448972 2       Tomcat 类加载机制 Tomcat Server 在启动的时候将构造一个 ...

  4. 电子商务(电销)平台中商品模块(Product)数据库设计明细(转载)

    电子商务(电销)平台中商品模块(Product)数据库设计明细 以下是自己在电子商务系统设计中的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 商品表 (product)|-- 自 ...

  5. 一个官翻教程集合:ASP.NET Core 和 EF Core 系列教程

    通过一个大学课程案例讲解了复杂实体的创建过程及讲解 1.ASP.NET Core 和 Entity Framework Core 系列教程——入门 (1 / 10) 2.ASP.NET Core 和 ...

  6. linux任务计划cron

    linux任务计划cron 1.crontab命令任务计划配置文件 [root@bogon ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/ ...

  7. Lintcode---验证二叉查找树

    给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二叉查找树. 一个节点的 ...

  8. Excel 출력

    NativeExcel 참조 사이트 http://www.nika-soft.com/dwnld.htm IWorkbook book = Factory.CreateWorkbook(); lWo ...

  9. Atitit.预定义变量与变量预处理器

    Atitit.预定义变量与变量预处理器 1. 预定义变量与1 2. 变量预处理器1 3. 测试数据生成器3 1. 预定义变量与 姓名:$name 次数:$rdm 时间:$datetime 文件名:$f ...

  10. 环境搭建基础知识2(sublime text3中配置verilog语法高亮)

    需求说明:Verilog设计 内容       :verilog开发环境搭建 来自       :时间的诗 1 软件下载 1.1 官方下载 地址http://www.sublimetext.com/3 ...