STL——容器(Map & multimap)的查找
- map.find(key); //查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
- map.count(key); //返回容器中键值为key的对组个数。对map来说,要么是0,要么是1;对multimap来说,值>=0。
- map.lower_bound(keyElem); //返回第一个key>=keyElem元素的迭代器。
- map.upper_bound(keyElem); // 返回第一个key>keyElem元素的迭代器。
- map.equal_range(keyElem); //返回容器中key与keyEl相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。
1. map.find(key);
find(); 的所有返回值均为 key 的 iterator 类型迭代器




代码示例:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 map<int, string> mapStu1;
9
10 mapStu1.insert(pair<int, string>(1, "内容A"));
11 mapStu1.insert(pair<int, string>(2, "内容B"));
12 mapStu1.insert(pair<int, string>(3, "内容C"));
13 mapStu1.insert(pair<int, string>(4, "内容D"));
14 mapStu1.insert(pair<int, string>(5, "内容E"));
15
16 map<int, string>::iterator it_1 = mapStu1.find(3); //将返回值赋值给 iterator 类型的 it
17
18 if (it_1 != mapStu1.end()) //由于 find 为全部遍历,如果没有找到元素, 会返回 end()
19 {
20 cout << "key值: " << it_1->first << " 对应的velue为:" << it_1->second << endl;
21 }
22 else
23 {
24 cout << "没有找到对应的" << it_1->first << endl;
25 }
26
27 map<int, string>::iterator it_2 = mapStu1.find(6);
28
29 if (it_2 != mapStu1.end())
30 {
31 cout << "key值: " << it_2->first << " 对应的velue为:" << it_2->second << endl;
32 }
33 else
34 {
35 cout << "没有找到对应的key" << endl;
36 }
37
38 return 0;
39 }
打印结果:

由于 map 的 key具有唯一性, multimap 这种具有多个相同的 key 如何解决, 示例代码如下:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 multimap<int, string> multimapStu1;
9
10 multimapStu1.insert(pair<int, string>(1, "内容A"));
11 multimapStu1.insert(pair<int, string>(2, "内容B"));
12 multimapStu1.insert(pair<int, string>(3, "内容C"));
13 multimapStu1.insert(pair<int, string>(3, "内容D"));
14 multimapStu1.insert(pair<int, string>(3, "内容E"));
15 multimapStu1.insert(pair<int, string>(4, "内容F"));
16
17 map<int, string>::iterator it_1 = multimapStu1.find(3); //将返回值赋值给 iterator 类型的 it
18
19 if (it_1 != multimapStu1.end())
20 {
21 for (; it_1 != multimapStu1.end(); it_1++)
22 {
23 if (it_1->first == 3)
24 {
25 cout << "key值: " << it_1->first << " 对应的velue为:" << it_1->second << endl;
26 }
27 }
28 }
29
30 return 0;
31 }
打印结果:

2. map.count(key);
统计拥有 key 的数量, 示例代码如下:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 multimap<int, string> multimapStu1;
9
10 multimapStu1.insert(pair<int, string>(1, "内容A"));
11 multimapStu1.insert(pair<int, string>(2, "内容B"));
12 multimapStu1.insert(pair<int, string>(3, "内容C"));
13 multimapStu1.insert(pair<int, string>(3, "内容D"));
14 multimapStu1.insert(pair<int, string>(3, "内容E"));
15
16 map<int, string>::iterator it_1 = multimapStu1.find(3);
17
18 int count = multimapStu1.count(3);
19 cout << "找到" << count << "个相关元素" << endl;
20
21 if (it_1 != multimapStu1.end())
22 {
23 for (int i = 0; i < count; i++)
24 {
25 cout << "key值: " << it_1->first << " 对应的velue为:" << it_1->second << endl;
26 }
27 }
28 else
29 {
30 cout << "没找到" << endl;
31 }
32
33 return 0;
34 }
打印结果:

3. map.lower_bound(keyElem);
返回第一个key>=keyElem元素的迭代器,示例代码如下:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 multimap<int, string> multimapStu1;
9
10 multimapStu1.insert(pair<int, string>(1, "内容A"));
11 multimapStu1.insert(pair<int, string>(2, "内容B"));
12 multimapStu1.insert(pair<int, string>(3, "内容C"));
13 multimapStu1.insert(pair<int, string>(4, "内容D"));
14 multimapStu1.insert(pair<int, string>(4, "内容DD"));
15 multimapStu1.insert(pair<int, string>(4, "内容DDD"));
16 multimapStu1.insert(pair<int, string>(5, "内容E"));
17
18 //map<int, string>::iterator it_1 = multimapStu1.lower_bound(4);
19
20 cout << "输出 key 值大等于4以后的内容" << endl;
21
22 for (map<int, string>::iterator it = multimapStu1.lower_bound(3); it != multimapStu1.end(); it++)
23 {
24 if (it->first == 4)
25 {
26 cout << "第一个 key 为:" << it->first << " 其内容为:" << it->second << endl;
27 }
28 }
29
30 return 0;
31 }
打印结果:

4. map.upper_bound(keyElem);
返回第一个key>keyElem元素的迭代器,代码示例:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 multimap<int, string> multimapStu1;
9
10 multimapStu1.insert(pair<int, string>(1, "内容A"));
11 multimapStu1.insert(pair<int, string>(2, "内容B"));
12 multimapStu1.insert(pair<int, string>(3, "内容C"));
13 multimapStu1.insert(pair<int, string>(4, "内容D"));
14 multimapStu1.insert(pair<int, string>(4, "内容DD"));
15 multimapStu1.insert(pair<int, string>(4, "内容DDD"));
16 multimapStu1.insert(pair<int, string>(5, "内容E"));
17
18 cout << "输出 key 值大等于4以后的内容" << endl;
19
20 for (map<int, string>::iterator it = multimapStu1.upper_bound(3); it != multimapStu1.end(); it++)
21 {
22 if (it->first == 4)
23 {
24 cout << "第一个 key 为:" << it->first << " 其内容为:" << it->second << endl;
25 }
26 }
27
28 return 0;
29 }
打印结果:

5. map.equal_range(keyElem);
返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。代码如下:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 multimap<int, string> multimapStu1;
9
10 multimapStu1.insert(pair<int, string>(1, "内容A"));
11 multimapStu1.insert(pair<int, string>(2, "内容B"));
12 multimapStu1.insert(pair<int, string>(3, "内容C"));
13 multimapStu1.insert(pair<int, string>(3, "内容CC"));
14 multimapStu1.insert(pair<int, string>(3, "内容CCC"));
15 multimapStu1.insert(pair<int, string>(4, "内容D"));
16
17 cout << "输出 key 与 keyElem 相等的上下限的两个迭代器" << endl;
18
19 pair<multimap<int, string>::iterator, multimap<int, string>::iterator> mmit = multimapStu1.equal_range(3);
20
21 if (mmit.first != multimapStu1.end())
22 {
23 cout << "第一个迭代器的 key 为:" << (*mmit.first).first << " 其内容为:" << (*mmit.first).second << endl;
24 }
25
26 if (mmit.second != multimapStu1.end())
27 {
28 cout << "第二个迭代器的 key 为:" << (*mmit.second).first << " 其内容为:" << (*mmit.second).second << endl;
29 }
30
31 return 0;
32 }
打印结果:

==========================================================================================================================
STL——容器(Map & multimap)的查找的更多相关文章
- STL:map/multimap用法详解
map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...
- STL之map&multimap使用简介
map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...
- STL容器 -- Map
核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序. 头文件: #include <map> 拓展: multimap 是一个多重映 ...
- STL容器Map
Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)
- 【STL】-Map/Multimap的用法
初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...
- STL - 容器 - Map(二)
把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> ...
- STL - 容器 - Map(一)
MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...
- iBinary C++STL模板库关联容器之map/multimap
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...
- C++STL容器(lower_bound,upper_bound)
C++STL容器中有三种二分查找函数,这里分享其中的两个 这两个函数其实都可以理解为不破坏数组次序的前期下能将目标元素插入到数组的第几个位置,不过在细节上两个函数有所差异 int d[6]={0,2, ...
随机推荐
- Python_科学计算库
说明:若没有训练级联表,则需要相关级联表才能实现功能 文字识别 # -*- coding: utf-8 -*- """ 简介:用样本训练数据,再识别 "&quo ...
- 微信小程序生成二维码并且扫码跳转并且携带参数
话不多说,直接上代码,直接把APPID和APPSECRET改成自己的就能用了 <?php header('content-type:text/html;charset=utf-8'); //配置 ...
- CorelDRAW常用工具之渐变工具
我们在进行宣传单页或者LOGO等等各种平面设计时,颜色的使用是极为重要的一方面.有些新手可能还不知道怎么填充多种颜色的渐变,有的背景色不止2个颜色渐变,而是由多种颜色调成的. 我们在画布上画两个图形, ...
- PowerPoint无法正常加载MathType的解决方法
MathType是一款十分便捷的数学公式编辑器,可以和很多办公软件和网站兼容使用,我们日常用的比较多的也就是Office和WPS,更具体的说是Word\Excel\PPT等等一系列办公常用软件. 不过 ...
- 「LOJ 3153」 「JOI Open 2019」三级跳
题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...
- 看完这篇还不会 Elasticsearch 搜索,那我就哭了!
本文主要介绍 ElasticSearch 搜索相关的知识,首先会介绍下 URI Search 和 Request Body Search,同时也会学习什么是搜索的相关性,如何衡量相关性. Search ...
- Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
点波关注不迷路,一键三连好运连连! 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员 ...
- 2. git命令行操作之本地库操作
2.1 本地库初始化 git init 命令 用于创建一个空的Git本地仓库或重新初始化一个现有本地仓库 注:.git目录中存放的是本地库相关的子目录和文件,不要删除也不要随意修改 git confi ...
- CountDownLatch、CyclicBarrier、Semaphore、Exchanger 的详细解析
本文主要介绍和对比我们常用的几种并发工具类,主要涉及 CountDownLatch . CyclicBarrier . Semaphore . Exchanger 相关的内容,如果对多线程相关内容不熟 ...
- 抖音短视频爆火的背后到底是什么——如何快速的开发一个完整的直播app
前言 今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,今天我来教你从零开始搭建一个完整的直播app,希望能帮助 ...