STL中的set是用什么实现的?为什么不用hash?
2014-03-28 16:05
274 查看
STL的set用什么实现的?为什么不用hash?
----------------------------------------------------------
下面算是比较好的回答,当强调hash表的缺点时,一定要说明内存分配的问题,会浪费一部分内存。而且hash表会为每种类型构造hash函数,不一定快。
一个在PHP中使用较多的字符串hash函数:
是用红黑树实现的,红黑树是一种平衡性很好的二分查找树。要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了,而是用红黑树只需要为不同类型重载operator<就可以了。
----------------------------------------------------------
下面算是比较好的回答,当强调hash表的缺点时,一定要说明内存分配的问题,会浪费一部分内存。而且hash表会为每种类型构造hash函数,不一定快。
一个在PHP中使用较多的字符串hash函数:
static unsigned long hashpjw(char *arKey, unsigned int nKeyLength) { unsigned long h = 0, g; char *arEnd=arKey+nKeyLength; while (arKey < arEnd) { h = (h << 4) + *arKey++; if ((g = (h & 0xF0000000))) { h = h ^ (g >> 24); h = h ^ g; } } return h; }
是用红黑树实现的,红黑树是一种平衡性很好的二分查找树。要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了,而是用红黑树只需要为不同类型重载operator<就可以了。
相关文章推荐
- STL中set底层实现方式? 为什么不用hash?
- STL中set底层实现方式? 为什么不用hash?
- stl中set和hash_set底层实现详解
- Java Set接口的主要实现类HashSet
- Set\HashSet集合为什么能去重(转)
- stl容器区别: vector list deque set map及底层实现
- WebSocket 是什么原理?为什么可以实现持久连接
- STL中vector的实现原理 (衍生:Map, Set等实现原理)
- Set\HashSet集合为什么能去重
- 封装的一个sorted_vector示例,实现了stl::set的一部分接口
- 关于strcpy的问题,解释一下为什么VS中标准的方法不用memcpy实现
- WebSocket 是什么原理?为什么可以实现持久连接?
- STL中map,multimap,set,multiset,unordered_map,unordered_multimap,unordered_set,unordered_multiset的实现方
- cdecl、stdcall、fastcall是什么?哪种可以实现个数不定的入口参数,为什么?
- STL—— set与hash_set
- STL源码中map和set中key值不能修改的实现
- 实现键值对存储(一):什么是键值对存储,为什么要实现它
- WebSocket 是什么原理?为什么可以实现持久连接?
- STL中vector,Map,Set的实现原理
- 【cl】统计n元串的频率:VC++ STL 的map, hash_map, set, vector...