Bitset<>用于unordered container时的默认hash函数
自从c++11起,bitset用于unordered container,将会提供默认的hash函数。
在gcc中,相关代码如下:
01495 // DR 1182.
01496 /// std::hash specialization for bitset.
01497 template<size_t _Nb>
01498 struct hash<_GLIBCXX_STD_D::bitset<_Nb>>
01499 : public std::unary_function<_GLIBCXX_STD_D::bitset<_Nb>, size_t>
01500 {
01501 size_t
01502 operator()(const _GLIBCXX_STD_D::bitset<_Nb>& __b) const
01503 {
01504 const size_t __clength = (_Nb + __CHAR_BIT__ - 1) / __CHAR_BIT__;
01505 return std::_Fnv_hash::hash(__b._M_getdata(), __clength);
01506 }
01507 };
01508
01509 template<>
01510 struct hash<_GLIBCXX_STD_D::bitset<0>>
01511 : public std::unary_function<_GLIBCXX_STD_D::bitset<0>, size_t>
01512 {
01513 size_t
01514 operator()(const _GLIBCXX_STD_D::bitset<0>&) const
01515 { return 0; }
01516 };
在vs2015中,相关代码如下:
// TEMPLATE STRUCT SPECIALIZATION hash
template<size_t _Bits>
struct hash<bitset<_Bits> >
{ // hash functor for bitset<_Bits>
typedef bitset<_Bits> argument_type;
typedef size_t result_type; size_t operator()(const argument_type& _Keyval) const
{ // hash _Keyval to size_t value by pseudorandomizing transform
return (_Keyval.hash());
}
};
我自己也写了一小段程序来试验bitset在unordered container中的用法:
#include <bitset>
#include <unordered_set>
#include <iostream>
#include "print.hpp"
using namespace std; int main()
{
bitset<3> bitset00(0);
bitset<3> bitset01(1);
bitset<3> bitset02(2);
bitset<3> bitset03(3);
bitset<3> bitset04(4);
bitset<3> bitset05(5);
bitset<3> bitset06(6);
bitset<3> bitset07(7); unordered_set<bitset<3>> coll = {bitset00, bitset01, bitset02, bitset03, bitset04, bitset05, bitset06, bitset07 };
PRINT_ELEMENTS(coll);
return 0;
}
注:其中print.hpp借用的是Nicolai M. Josuttis的The C++ Standard Library中的代码。
其输出如下:
000 001 010 011 100 101 110 111
Bitset<>用于unordered container时的默认hash函数的更多相关文章
- STL学习笔记— —无序容器(Unordered Container)
简单介绍 在头文件<unordered_set>和<unordered_map> 中定义 namespace std { template <typename T, ty ...
- cmder设置打开时的默认目录
cmder设置打开时的默认目录 打开cmder自动进入工作目录,怎么配置? http://superuser.com/questions/1005285/run-a-bat-file-with-cmd ...
- input 默认值为灰色,输入时清楚默认值
input 默认值为灰色,输入时清楚默认值 <input value="please input your name" onFocus="if(value==def ...
- magento -- 添加新产品时状态默认为激活,库存状态默认为有库存
添加新产品时状态默认为激活 打开文件/app/code/core/Mage/Catalog/Model/Product/Status.php,注释掉“Please Select” /** * Retr ...
- [ActionScript 3.0] AS3 用于拖动对象时跟随鼠标的缓动效果
package com.fylibs.components.effects { import flash.display.DisplayObject; import flash.events.Even ...
- 其他函数:值为NULL时的默认值NVL,DECODE
NVL(列,默认数字值),此函数返回值为数值型,非NULL时返回原始值,NULL时返回默认数字值. DECODE:
- [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
[笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...
- Android开发,在Activity启动时,默认隐藏软键盘。和遮挡Edittext时的处理
在Activity启动时,默认隐藏软键盘: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="s ...
- JS检查当图片不存在时显示默认图片和键盘大小写键状态
当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...
随机推荐
- linux自定义系统调用
1 Linux3.10.21内核系统调用设置 以前看的内核版本时2.6.11的,里面的系统调用设置一目了然啊!在文件entry.S中直接定义了sys_call_table表,并在这个文件中用各个系统调 ...
- EntityFramework 7 OrderBy Skip Take-计算排序分页 SQL 翻译
先解释一下这个标题的意思,OrderBy 在 Linq 语句中,我们经常使用,比如 OrderBy(b => b.BlogId) 就是对 BlogId 字段进行升序排序,这是针对一个字段的排序, ...
- Hive Tutorial(上)(Hive 入门指导)
用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...
- jdk8中java.util.concurrent包分析
并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...
- c#知识点总结
1.如果要使用自动属性的话,必须2个都是自动属性, 不允许出现一个自动,一个非自动的情况,否则会报错. 2.命名规则,最好用动词+名词 比如 Is+Member+Valid ,方法的首字母大写,变量的 ...
- 根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)
项目中有个查询模块中用到查询条件: 年和周. 以往我直接指定是第几周,后来测试反映如果直接选择周的话并不知道所选周代表的年月日,而无法最快查询数据,后更改查询条件如下: 指定一个起始年月,根据起始年月 ...
- 关于C#静态变量初始化问题
关于这个静态变量,平时自己没有太认真的去认识.最近调项目的bug,让我重新认识了静态变量的特点. 其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化. 很简单的一句话,但 ...
- 深入理解javascript原型和闭包系列
从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评 ...
- 测试为什么Low
你从来没有因为一个歌手不会写曲填词而说歌手很Low! 你从来没有因为一个演员不会摄影.唱歌而说演员很Low! 你从来没有因为一个记者不会摄影,拍照而说记者很Low! 你从来没有因为一个美食家不会烧菜, ...
- 让我们一起用开源数据库和开源框架废弃Access
一.为什么要废弃Access? 1.客户的机子上需要安装access的驱动 ps:这个比较烦人,大家都知道部署越简单越好,安装这个对用户来说太繁琐了. 2.操作时性能不佳 using System; ...