当前位置:   article > 正文

c++ map容器 的 find 与 count 查找方式,时间性能比较_c++ map find

c++ map find

在 C++ 的 unordered_map 容器中,可以使用 find() 函数来判断某个键是否存在于容器中。相比于 count() 函数,find() 函数在判断存在性时更为高效。

count() 函数返回键出现的次数不同,find() 函数返回一个指向匹配键的迭代器。如果找到了匹配的键,则返回指向该键的迭代器;如果没有找到匹配的键,则返回指向容器末尾的迭代器。

通过检查 find() 函数返回的迭代器是否等于容器的末尾迭代器,我们可以判断键是否存在于容器中。如果迭代器等于容器的末尾迭代器,则表示没有找到匹配的键,否则表示找到了匹配的键。

为此,写以以下测试代码进行验证:

 

  1. /*
  2. * 文件名: map_test.cpp
  3. * 作者: Ken
  4. * 创建时间: 2023-11-4
  5. * 最后修改时间: 2023-11-4
  6. * 版本号: 1.0
  7. * 描述: 测试 c++ map 容器 的find()与count()涵数时间性能比较
  8. */
  9. #include <iostream>
  10. #include <map>
  11. #include <chrono>
  12. int main() {
  13. std::unordered_map<int, int> m;
  14. int key = 4200;
  15. // 向容器中插入一些数据
  16. for (int i = 0; i < 1000000; ++i) {
  17. m[i] = i;
  18. }
  19. for (int j = 0; j < 3; j++)
  20. {
  21. printf("第 %d 次使用 count() 函数进行键的存在性判断\n",j+1);
  22. // 计时开始
  23. auto start = std::chrono::steady_clock::now();
  24. // 使用 count() 函数进行键的存在性判断
  25. if (m.count(key) > 0) {
  26. //if (m.find(key) != m.end()) {
  27. std::cout << "键存在于容器中" << std::endl;
  28. }
  29. else {
  30. std::cout << "键不存在于容器中" << std::endl;
  31. }
  32. // 计时结束
  33. auto end = std::chrono::steady_clock::now();
  34. auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
  35. std::cout << "执行时间:" << duration << " 微秒" << std::endl;
  36. printf("使用 find() 函数进行键的存在性判断\n");
  37. // 计时开始
  38. start = std::chrono::steady_clock::now();
  39. // 使用 count() 函数进行键的存在性判断
  40. //if (m.count(key) > 0) {
  41. if (m.find(key) != m.end()) {
  42. std::cout << "键存在于容器中" << std::endl;
  43. }
  44. else {
  45. std::cout << "键不存在于容器中" << std::endl;
  46. }
  47. // 计时结束
  48. end = std::chrono::steady_clock::now();
  49. duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
  50. std::cout << "执行时间:" << duration << " 微秒" << std::endl << std::endl;
  51. }
  52. return 0;
  53. }

运行的结果显示:

第 1 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:481 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:174 微秒

第 2 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:88 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒

第 3 次使用 count() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒
使用 find() 函数进行键的存在性判断
键存在于容器中
执行时间:87 微秒

除了第一次冷启动时,不稳定外,其它比较都非常接近。说明两个涵数运行性能相当,不分上下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/992017
推荐阅读
相关标签
  

闽ICP备14008679号