赞
踩
在 C++ 的 unordered_map 容器中,可以使用 find()
函数来判断某个键是否存在于容器中。相比于 count()
函数,find()
函数在判断存在性时更为高效。
与 count()
函数返回键出现的次数不同,find()
函数返回一个指向匹配键的迭代器。如果找到了匹配的键,则返回指向该键的迭代器;如果没有找到匹配的键,则返回指向容器末尾的迭代器。
通过检查 find()
函数返回的迭代器是否等于容器的末尾迭代器,我们可以判断键是否存在于容器中。如果迭代器等于容器的末尾迭代器,则表示没有找到匹配的键,否则表示找到了匹配的键。
为此,写以以下测试代码进行验证:
- /*
- * 文件名: map_test.cpp
- * 作者: Ken
- * 创建时间: 2023-11-4
- * 最后修改时间: 2023-11-4
- * 版本号: 1.0
- * 描述: 测试 c++ map 容器 的find()与count()涵数时间性能比较
- */
-
- #include <iostream>
- #include <map>
- #include <chrono>
-
- int main() {
-
- std::unordered_map<int, int> m;
- int key = 4200;
-
- // 向容器中插入一些数据
- for (int i = 0; i < 1000000; ++i) {
- m[i] = i;
- }
- for (int j = 0; j < 3; j++)
- {
- printf("第 %d 次使用 count() 函数进行键的存在性判断\n",j+1);
- // 计时开始
- auto start = std::chrono::steady_clock::now();
-
- // 使用 count() 函数进行键的存在性判断
- if (m.count(key) > 0) {
-
- //if (m.find(key) != m.end()) {
- std::cout << "键存在于容器中" << std::endl;
- }
- else {
- std::cout << "键不存在于容器中" << std::endl;
- }
-
- // 计时结束
- auto end = std::chrono::steady_clock::now();
- auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
-
- std::cout << "执行时间:" << duration << " 微秒" << std::endl;
-
- printf("使用 find() 函数进行键的存在性判断\n");
- // 计时开始
- start = std::chrono::steady_clock::now();
-
- // 使用 count() 函数进行键的存在性判断
- //if (m.count(key) > 0) {
-
- if (m.find(key) != m.end()) {
- std::cout << "键存在于容器中" << std::endl;
- }
- else {
- std::cout << "键不存在于容器中" << std::endl;
- }
-
- // 计时结束
- end = std::chrono::steady_clock::now();
- duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
-
- std::cout << "执行时间:" << duration << " 微秒" << std::endl << std::endl;
-
- }
- return 0;
- }
运行的结果显示:
第 1 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:481 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:174 微秒
第 2 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:88 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒
第 3 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒
除了第一次冷启动时,不稳定外,其它比较都非常接近。说明两个涵数运行性能相当,不分上下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。