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, ...
随机推荐
- JVM简单入门
目录 初识JVM 双亲委派机制 沙箱安全机制 Native PC计数器 方法区 栈 堆 工具分析OOM GC算法 GC算法总结 JMM 初识JVM JVM的位置:jre中包含jvm. 双亲委派机制 双 ...
- IDEA创建web工程,不用Archetype(超简单)
Idea不用Archetype创建Web项目 以新建模块为例. 新建Maven项目 不勾选[Create from artchetype],直接Next pom中添加一句话: <artifact ...
- go特性-数组与切片
数组: 复制传递(不要按照c/c++的方式去理解,c/c++中数组是引用传递),定长 切片: 引用传递,底层实现是3个字段 array(数组) + len(长度) +cap(容量) type slic ...
- java多线程--【Foam番茄】
进程 是系统资源分配的单位 线程 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义.线程是cpu调度和执行的单位 注意:很多多线程是模拟出来的,真正的多线程是指有多 ...
- harbor私有仓库部署
Harbor 简介 Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户 ...
- kali修改配置文件后并保存
vim是进入配置文件并修改 修改完按Esc进入控制模式,再:w保存 :wq是保存并退出
- java备份Oracle数据库表
<html><head><title>数据备份</title><meta name="decorator" content=& ...
- java并发编程实战《四》互斥锁(下)
互斥锁(下):如何用一把锁保护多个资源? 一把锁可以保护多个资源,但是不能用多把锁来保护一个资源. 那如何保护多个资源? 当我们要保护多个资源时,首先要区分这些资源是否存在关联关系. 如下代码 ...
- PyQt(Python+Qt)学习随笔:MoviePy视频转GIF动图相关方法介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 MoviePy能处理的视频是ffmpeg格式的,老猿理解支持的文件类型 ...
- 第8.32节 Python中重写__delattr__方法捕获属性删除
一. 引言 上节介绍了__delattr__方法在Python清除实例属性时被捕获执行,本节结合例子介绍重写__delattr__方法,并说明__delattr__方法执行的触发逻辑. 二. 重写__ ...