layout: post

title: 侯捷STL学习(十)

date: 2017-07-23

tag: 侯捷STL

第二十三节 容器hashtable探索

  • hashtable冲突(碰撞)处理
  • rehash时,篮子扩充两倍,找到其附近的质数,重新计算元素位置
  • 内部扩充的数据已经预定好,53->97->....

  • hashtable实现
  • iterator要实现当当前node链表结束,要能进入到下一个buckets

  • hashtable使用
  • 模板参数的形式

  • 容器hashtable中hashfunction
  • hash{}的偏特化实现

  • hashtable使用

C++11--unordered容器

  • 结构

  • test unordered_set
  1. #include <unordered_set>
  2. #include <stdexcept>
  3. #include <string>
  4. #include <cstdlib> //abort()
  5. #include <cstdio> //snprintf()
  6. #include <iostream>
  7. #include <ctime>
  8. namespace jj15
  9. {
  10. void test_unordered_set(long& value)
  11. {
  12. cout << "\ntest_unordered_set().......... \n";
  13. unordered_set<string> c;
  14. char buf[10];
  15. clock_t timeStart = clock();
  16. for(long i=0; i< value; ++i)
  17. {
  18. try {
  19. snprintf(buf, 10, "%d", rand());
  20. c.insert(string(buf));
  21. }
  22. catch(exception& p) {
  23. cout << "i=" << i << " " << p.what() << endl;
  24. abort();
  25. }
  26. }
  27. cout << "milli-seconds : " << (clock()-timeStart) << endl;
  28. cout << "unordered_set.size()= " << c.size() << endl;
  29. cout << "unordered_set.max_size()= " << c.max_size() << endl; //357913941
  30. cout << "unordered_set.bucket_count()= " << c.bucket_count() << endl;
  31. cout << "unordered_set.load_factor()= " << c.load_factor() << endl;
  32. cout << "unordered_set.max_load_factor()= " << c.max_load_factor() << endl;
  33. cout << "unordered_set.max_bucket_count()= " << c.max_bucket_count() << endl;
  34. for (unsigned i=0; i< 20; ++i) {
  35. cout << "bucket #" << i << " has " << c.bucket_size(i) << " elements.\n";
  36. }
  37. string target = get_a_target_string();
  38. {
  39. timeStart = clock();
  40. auto pItem = find(c.begin(), c.end(), target); //比 c.find(...) 慢很多
  41. cout << "std::find(), milli-seconds : " << (clock()-timeStart) << endl;
  42. if (pItem != c.end())
  43. cout << "found, " << *pItem << endl;
  44. else
  45. cout << "not found! " << endl;
  46. }
  47. {
  48. timeStart = clock();
  49. auto pItem = c.find(target); //比 std::find(...) 快很多
  50. cout << "c.find(), milli-seconds : " << (clock()-timeStart) << endl;
  51. if (pItem != c.end())
  52. cout << "found, " << *pItem << endl;
  53. else
  54. cout << "not found! " << endl;
  55. }
  56. }
  57. }

侯捷STL学习(十)--容器hashtable探索(unordered set/map)的更多相关文章

  1. 侯捷STL学习(八)-- 深度探索deque

    layout: post title: 侯捷STL学习(八) date: 2017-07-19 tag: 侯捷STL --- 第十八节 深度探索deque上 duque内存结构 分段连续,用户看起来是 ...

  2. 侯捷STL学习(七)--深度探索vector&&array

    layout: post title: 侯捷STL学习(七) date: 2017-06-13 tag: 侯捷STL --- 第十六节 深度探索vector vector源码剖析 vector内存2倍 ...

  3. 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)

    layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...

  4. 侯捷STL学习(12)--STL相关内容hash+tuple

    layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...

  5. 侯捷STL学习(11)--算仿+仿函数+适配器

    layout: post title: 侯捷STL学习(十一) date: 2017-07-24 tag: 侯捷STL --- 第三讲 标准库内核分析-算法 标准库算法形式 iterator分类 不同 ...

  6. 侯捷STL学习(一)--顺序容器测试

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  7. 侯捷STL学习(一)

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  8. 侯捷STL学习(四)--allocator和容器时间的实现关系

    第十一节 分配器 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Visual Studio 12.0 ...

  9. 侯捷STL学习(五)--allocator和容器之间的实现关系

    第十一节 分配器 STL源码学习----内存管理 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Vi ...

随机推荐

  1. C# 处理base64 以及base64的原理分析

    base64的原理, http://www.cnblogs.com/diligenceday/p/6002382.html http://www.cnblogs.com/chengxiaohui/ar ...

  2. Linux下Python科学计算包numpy和SciPy的安装

      系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lap ...

  3. js运算符、关键字、保留字、转义字符

  4. addslashes及其反函数 stripslashes

    addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. stripslashes() 去掉addslashes 所添加的反斜杠 预定义字符是: 单引号(') 双引号(") 反 ...

  5. QT Creator引用win32 api类库方法(.lib)

    由于Qt Creator使用的是mingW进行程序编译,该编译方式无法识别#pragma comment(lib,"lib\\hvdailt.lib")引用. 所以需要在.Pro文 ...

  6. jenkins自动发送邮件配置

    一. 前提:确保插件存在 在一切开始之前,必须得确保任务配置里有两个插件:E-mail Notification(邮件通知) 和 Editable Email Notification(可编辑的邮件通 ...

  7. oracle管理优化必备语句以及oracle SQL语句性能调整

    本文转自http://www.dataguru.cn/article-3302-1.html oracle数据库管理优化必备语句: 1. SELECT T.START_TIME,T.USED_UBLK ...

  8. 实用工具类--第三方开源--Lazy

    下载地址 :https://github.com/ddwhan0123/Lazy 工具 描述 AnimationUtils 动画工具类 AppUtils APP相关信息工具类 AssetDatabas ...

  9. OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )

    转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...

  10. UVA - 1602 Lattice Animals (暴力+同构判定)

    题目链接 题意:求能放进w*h的网格中的不同的n连通块个数(通过平移/旋转/翻转后相同的算同一种),1<=n<=10,1<=w,h<=n. 刘汝佳的题真是一道比一道让人自闭.. ...