本篇学习unordered_map的查找操作和观察器相关的操作,具体的函数如下:

count

(C++11)

返回匹配特定键的元素数量
(公开成员函数)

find

(C++11)

寻找带有特定键的元素
(公开成员函数)

contains

(C++20)

检查容器是否含有带特定键的元素
(公开成员函数)

equal_range

(C++11)

返回匹配特定键的元素范围
(公开成员函数)

hash_function

(C++11)

返回用于对键散列的函数
(公开成员函数)

key_eq

(C++11)

返回用于比较键的相等性的函数
(公开成员函数)

示例代码:

#include <iostream>
#include <unordered_map>
#include <string>using namespace std;void findOpertion()
{//1.count返回匹配特定键的元素数量std::unordered_map<int, std::string> map1;map1.emplace(1, "Hero");map1.emplace(2, "Archer");map1.emplace(3, "Barry");int nkey = 0;for(nkey = 1; nkey < 6; ++nkey){if(map1.count(nkey) > 0)std::cout << nkey << " is element of map1\n";elsestd::cout << nkey <<  " is not element of map1\n";}//2.find寻找带有特定键的元素,返回的是迭代器std::unordered_map<int, std::string> map2;map2.emplace(4, "camel");map2.emplace(5, "iran");std::unordered_map<int, std::string>::iterator it;it = map2.find(4);if(it != map2.end())std::cout << "find element is " << it->second << std::endl;elsestd::cout << "not find element\n";//3.equal_range返回匹配特定键的元素范围,返回容器中所有拥有给定关键的元素范围。范围以二个迭代器定义,一个指向首个不小于 key 的元素,//另一个指向首个大于 key 的元素。首个迭代器可以换用 lower_bound() 获得,而第二迭代器可换用 upper_bound() 获得。std::unordered_map<int, std::string> map3;map3.emplace(1, "scott");map3.emplace(3, "camel");map3.emplace(5, "Sky");map3.emplace(7, "beer");pair<unordered_map<int, string>::iterator, unordered_map<int, string>::iterator> it2;pair<unordered_map<int, string>::iterator, unordered_map<int, string>::iterator> it3;std::unordered_map<int,char> map = {{1,'a'},{1,'b'},{3,'d'},{5,'b'}};auto range = map.equal_range(1);for (auto it = range.first; it != range.second; ++it) {std::cout << it->first << ' ' << it->second << '\n';}std::cout << range.first->first << " => " << range.first->second << std::endl;std::cout << range.second->first << " => " << range.second->second << std::endl;//printit2 = map3.equal_range(1);//返回的第一个迭代器为传进来的关键字的值,//这个与map里返回的值有差别,如果没有这个关键字,则返回end()迭代器。//在map里equal_range(2)返回3的迭代器,而在这里返回的是end()迭代器if(it2.first != map3.end()){std::cout << "lower bound points to: ";//返回的第一个迭代器为传进来的关键字的值std::cout << it2.first->first << " => " << it2.first->second << std::endl;}else{std::cout << "not find lower range" << endl;}if(it2.second != map3.end()){std::cout << "upper bound points to: ";//返回的第二个迭代器首个大于传进来的关键字的值std::cout << it2.second->first << " => " << it2.second->second << std::endl;}else{std::cout << "not find upper range" << endl;}std::cout << "======================================\n";it3 = map3.equal_range(3);std::cout << "lower bound points to: ";std::cout << it3.first->first << " => " << it3.first->second << std::endl;std::cout << "upper bound points to: ";std::cout << it3.second->first << " => " << it3.second->second << std::endl;//4.lower_bound返回指向首个等于 key 的元素的迭代器。若找不到这种元素,则返回尾后迭代器std::unordered_map<int, std::string>::iterator lowerIt;//lowerIt = map3.lower_bound(2);//这个key一定要存在unordered_map中,否则返回end()迭代器//std::cout << "lowerIt->first = " << lowerIt->first << " lowerIt->second = " << lowerIt->second << std::endl;lowerIt = map3.lower_bound(3);std::cout << "lowerIt->first = " << lowerIt->first << " lowerIt->second = " << lowerIt->second << std::endl;//5.upper_bound返回指向首个大于 key 的元素的迭代器。若找不到这种元素,则返回尾后。std::unordered_map<int, std::string>::iterator upperIt;//upperIt = map3.upper_bound(4);//这个key一定要存在unordered_map中,否则返回end()迭代器//std::cout << "upperIt->first = " << upperIt->first << " upperIt->second = " << upperIt->second << std::endl;upperIt = map3.upper_bound(5);std::cout << "upperIt->first = " << upperIt->first << " upperIt->second = " << upperIt->second << std::endl;//6. key_comp    返回用于比较键的函数std::unordered_map<int, std::string> map4;map4.emplace(1, "scott");map4.emplace(3, "beer");map4.emplace(5, "Sky");map4.emplace(7, "camel");std::unordered_map<int, std::string>::key_compare funCompare = map4.key_comp();//返回一个比较键的函数bool b1 = funCompare(3, 5);bool b2 = funCompare(5, 3);std::cout << "b1 = " << b1 << " b2 = " << b2 << std::endl;//7. value_comp返回用于在value_type类型的对象中比较键的函数。std::unordered_map<char, int> map5;map5.emplace('1', 12);map5.emplace('3', 8);map5.emplace('5', 54);map5.emplace('7', 6);std::unordered_map<char, int>::iterator endIt = map5.end();auto lastElement = --endIt;//最后一个元素std::cout << "lastElement.key = " << lastElement->first << " lastElement.value = " << lastElement->second << std::endl;std::unordered_map<char, int>::iterator firstIt = map5.begin();//第一个元素迭代器bool b3 = map5.value_comp()(*firstIt, *lastElement);++firstIt;bool b4 = map5.value_comp()(*firstIt, *lastElement);std::cout << "b3 = " << b3 << " b4 = " << b4 << std::endl;//8. hash_function    返回对关键哈希的函数unordered_map<int, string> map6;unordered_map<int, string>::hasher fn = map6.hash_function();std::cout << "fn1 = " << fn(1) << " fn2 = " << fn(2) << std::endl;//9. key_eq 返回用于比较键的相等性的函数unordered_map<string, string> map7;bool case_insensitive = map7.key_eq()("camle","CAMLE");std::cout << "map7.key_eq() is ";std::cout << ( case_insensitive ? "case insensitive" : "case sensitive" );std::cout << std::endl;//case sensitive:区分大小写//case insensitive不区分大小写
}int main()
{findOpertion();cout << "hello world" << endl;return 0;
}

运行结果:

参考:

https://zh.cppreference.com/w/cpp/container/unordered_map

http://www.cplusplus.com/reference/unordered_map/unordered_map/

unordered_map学习之查找操作和观察器操作count,find, contains(C++20),equal_range,hash_function, key_eq相关推荐

  1. unordered_multimap学习之查找操作和观察器操作count,find, contains(C++20),equal_range,hash_function, key_eq

    本篇学习unordered_multimap的查找操作和观察器操作,具体函数如下: count (C++11) 返回匹配特定键的元素数量 (公开成员函数) find (C++11) 寻找带有特定键的元 ...

  2. multimap学习之查找操作count,find,lower_bound,lower_bound,upper_bound,key_comp, value_comp

    本篇学习multimap查找和观察器操作,具体的函数如下 查找 count 返回匹配特定键的元素数量 (公开成员函数) find 寻找带有特定键的元素 (公开成员函数) contains (C++20 ...

  3. Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传

    一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...

  4. 《C++Primer》第九章-顺序容器-学习笔记(1)-顺序容器定义与操作

    <C++Primer>第九章-顺序容器-学习笔记(1) 文章目录 <C++Primer>第九章-顺序容器-学习笔记(1) 摘要 顺序容器的定义 容器元素的初始化 将一个容器初始 ...

  5. Qt实用技巧:使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 需求 使用OpenCV库的视频播放器(支持播放器操作,如暂停.恢复 ...

  6. 『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性...

    『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性 __________________________________ ...

  7. 【RobotStudio学习笔记】(二)手动操作

    手动单轴操作 打开一个机器人系统,打开虚拟示教器 点击菜单-手动操纵-动作模式,可以看到下方有四个动作模型,其中轴1-3和轴4-6为单轴操作,后面是线性操作,和重定位操作,这里选择轴1-3,点击确定. ...

  8. OpenGL学习之路13----相机控制(鼠标操作)

    代码放在github上 本文根据教程:ogldev进行扩充学习,一步步从零开始,记录学习历程 到目前为止,我们已经可以将一个物体以任意大小.任意角度和任意位置摆放在世界空间,相关博文链接: OpenG ...

  9. 使用层级观察器hierarchyviewer综合各种布局实现Android QQ2012登陆界面和注册界面...

    最近工作比较轻松,项目不忙,所以闲着的时间去研究了自己比较感兴趣的UI界面,确实漂亮的UI能给用户带来良好的体验,在android应用中一直尤为重要,这次模仿的是QQ2012Android版的的最新登 ...

最新文章

  1. elementUI 写一个表头列名、表体单元格样式、翻页器相对较为动态的表格el-table
  2. 独家|OpenCV1.11 使用OpenCV制作一个低成本立体摄像机
  3. 一文读懂卷积神经网络CNN(学习笔记)
  4. i18n java_Java国际化(i18n) Locale类详细示例
  5. Java锁 优先级_详解Java的线程的优先级以及死锁
  6. GOOD MEETINGS CREATE SHARED UNDERSTANDING, NOT BRDS!
  7. Log4j2发新版本2.16.0,加固漏洞防御,不想被攻击,就赶快更新啦!
  8. JAVA窗口——Frame
  9. plc原理及应用_一年只一次,百篇电工+PLC技术资料大合集,不看真的亏!
  10. fastboot刷系统的步骤
  11. 3gfax服务器接收文件,3G-FAX单机版操作指南 - AOFAX—传真服务器,网络传真.DOC
  12. jszip批量下载压缩
  13. 维修手册 html 打开,汽车维修手册大全.pdf
  14. 干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(下)
  15. office365安装后仍显示之前版本
  16. 火狐浏览器渗透插件_关于浏览器插件渗透的思考
  17. easyUI之LinkButton(按钮)
  18. [Python]简单的计算题
  19. 信者的路,读《病隙碎笔》——leo鉴书(16)
  20. vue 大屏数字上下滚动

热门文章

  1. HAproxy的配置详解
  2. 小学计算机培训返岗实践总结,民乐镇小学开展2018学年新教师汇报课暨新教师岗前培训返岗实践考核会...
  3. [世界读书日] 最好的书,都在博雅之中
  4. 中国现代最深刻的学者思想家——秦晖老师!(执教于清华大学历史系)
  5. AtomicInteger类的理解与使用
  6. AI驱动的京东端到端补货技术建设实践
  7. Ubuntu16.04下实现darknet-yolov3训练自己的数据(含loss图、mAP计算)
  8. 【渝粤题库】陕西师范大学209018 现代城市管理 作业
  9. 腾讯云披露退役硬盘销毁流程,强调用户数据安全保护
  10. 什么时候需要图像采集卡