侯捷STL学习(十)--容器hashtable探索(unordered set/map)
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
 
#include <unordered_set>
#include <stdexcept>
#include <string>
#include <cstdlib> //abort()
#include <cstdio>  //snprintf()
#include <iostream>
#include <ctime>
namespace jj15
{
void test_unordered_set(long& value)
{
	cout << "\ntest_unordered_set().......... \n";
unordered_set<string> c;
char buf[10];
clock_t timeStart = clock();
    for(long i=0; i< value; ++i)
    {
    	try {
    		snprintf(buf, 10, "%d", rand());
        	c.insert(string(buf));
		}
		catch(exception& p) {
			cout << "i=" << i << " " << p.what() << endl;
			abort();
		}
	}
	cout << "milli-seconds : " << (clock()-timeStart) << endl;
	cout << "unordered_set.size()= " << c.size() << endl;
	cout << "unordered_set.max_size()= " << c.max_size() << endl;  //357913941
	cout << "unordered_set.bucket_count()= " << c.bucket_count() << endl;
	cout << "unordered_set.load_factor()= " << c.load_factor() << endl;
	cout << "unordered_set.max_load_factor()= " << c.max_load_factor() << endl;
	cout << "unordered_set.max_bucket_count()= " << c.max_bucket_count() << endl;
  	for (unsigned i=0; i< 20; ++i) {
    	cout << "bucket #" << i << " has " << c.bucket_size(i) << " elements.\n";
  	}			
string target = get_a_target_string();
	{
    timeStart = clock();
auto pItem = find(c.begin(), c.end(), target);	//比 c.find(...) 慢很多
	cout << "std::find(), milli-seconds : " << (clock()-timeStart) << endl;
	if (pItem != c.end())
    	cout << "found, " << *pItem << endl;
  	else
    	cout << "not found! " << endl;
 	}
 	{
    timeStart = clock();
auto pItem = c.find(target);		//比 std::find(...) 快很多
	cout << "c.find(), milli-seconds : " << (clock()-timeStart) << endl;
	if (pItem != c.end())
    	cout << "found, " << *pItem << endl;
  	else
    	cout << "not found! " << endl;
 	}
}
}
												
											侯捷STL学习(十)--容器hashtable探索(unordered set/map)的更多相关文章
- 侯捷STL学习(八)-- 深度探索deque
		
layout: post title: 侯捷STL学习(八) date: 2017-07-19 tag: 侯捷STL --- 第十八节 深度探索deque上 duque内存结构 分段连续,用户看起来是 ...
 - 侯捷STL学习(七)--深度探索vector&&array
		
layout: post title: 侯捷STL学习(七) date: 2017-06-13 tag: 侯捷STL --- 第十六节 深度探索vector vector源码剖析 vector内存2倍 ...
 - 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)
		
layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...
 - 侯捷STL学习(12)--STL相关内容hash+tuple
		
layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...
 - 侯捷STL学习(11)--算仿+仿函数+适配器
		
layout: post title: 侯捷STL学习(十一) date: 2017-07-24 tag: 侯捷STL --- 第三讲 标准库内核分析-算法 标准库算法形式 iterator分类 不同 ...
 - 侯捷STL学习(一)--顺序容器测试
		
开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...
 - 侯捷STL学习(一)
		
开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...
 - 侯捷STL学习(四)--allocator和容器时间的实现关系
		
第十一节 分配器 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Visual Studio 12.0 ...
 - 侯捷STL学习(五)--allocator和容器之间的实现关系
		
第十一节 分配器 STL源码学习----内存管理 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Vi ...
 
随机推荐
- mongodb,redis简单学习
			
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
 - HBase协处理器的使用(添加Solr二级索引)
			
给HBase添加一二级索引,HBase协处理器结合solr 代码如下 package com.hbase.coprocessor; import java.io.IOException; import ...
 - nodejs mysql 创建连接池
			
用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...
 - Windows 安装Mysql8.0 绿色包
			
〇.准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环 ...
 - Spring Cloud Ribbon实现客户端负载均衡
			
1.构建microservice-consumer-movie-ribbon项目,在pom.xml中引入ribbon依赖 在引入Eureka依赖的时候,默认里面含有ribbon依赖 2.添加@Load ...
 - MDX中Filter 与Exist的区别
			
获得一个集合,这个一般用来筛选出一个自定义的set,比如在中国的餐厅 该set返回所有MSDNteam下并且在Fact Thread度量上有记录的products 用Exists实现 sele ...
 - jsp:tld标签
			
z注意每个uri地址要保持统一 1.创建MytagPrinta.java文件 package cn.tag; import java.io.IOException; import javax.serv ...
 - phalcon 连接多个数据库 phalcon multi-database
			
db: //This service returns a MySQL database $di->set('dbMaster', function() { return new \Phalcon ...
 - webservice中将dataset 压缩
			
http://blog.csdn.net/bodaowang/article/details/6889446 在webservice中将dataset序列化是我们经常遇到的问题,但是遇到很大的data ...
 - C++(十三)— map的排序
			
在c++中有两个关联容器,第一种是map,内部是按照key排序的,第二种是unordered_map,容器内部是无序的,使用hash组织内容的. 1.对有序map中的key排序 如果在有序的map中, ...