首页 > 代码库 > 第十三篇:multimap容器和multiset容器中的find操作
第十三篇: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操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。