- 论坛徽章:
- 9
|
本帖最后由 wlmqgzm 于 2016-12-29 20:57 编辑
对的,常规的 open addressin 有 两个元素,一个表示未占用,另一个表示已删除,所以,觉得不够优化。
修改为 unsigned int uint_distance; 其中拿出一个bit表示 未占用或者已经删除, 其余bit表示最大搜索长度,这样在数据比较满的情况下有更好的性能。
步进长度为1,所以cache友好
template<typename KEY, typename VALUE>
class Struct_circular_hash_map_record
{
public:
Struct_circular_hash_map_record( void );
#ifdef CIRCULAR_HASH_MAP_HAS_MEMORY_COUNT
size_t capacity( void );
#endif // CIRCULAR_HASH_MAP_HAS_MEMORY_COUNT
#ifdef CIRCULAR_HASH_MAP_VALUE_HAS_VERSION
void init_version( void );
void increase_version( void );
unsigned int uint_version;
#endif // CIRCULAR_HASH_MAP_VALUE_HAS_VERSION
unsigned int uint_distance;
unsigned int uint_hash;
KEY key;
VALUE value;
};
|
|