近来看linux kernel 的路由表实现。因为本人向来关注数据结构多于关注算法,所以就注意到里面的数据组织中主要用到了两种结构是,链表和散列表。
这两种结构其实都很熟悉,链表c++标准库里就有,而散列表虽然标准库没有,但是我自己实现过很多回了。不得不说散列表是很强大的数据结构。
这里要探讨散列表的标准实现,一直以来c++标准库98里没有散列表是很多C++程序员的遗憾。但是很多编译器厂商都实现了自己的散列表。
SGISTL、STLPORT、Dinknumware STL等都实现了各自的散列表。
由于没有标准,所以各自的实现也就各不相同,性能、接口也都有差异、不过在容器的名字倒是难得的一致,基本都是hash_map、hash_set。
等C++标准委员会准备整理散列表的标准时,才发现数年间非标准的实现已经广泛流行。标准的名字hash_XX已经被"鸠占鹤巢"。因此、C++标准委员会不得不选用另一个名字unordered_XX,不过这个名字也更好的表现了散列表的本质--它是无序的。
阅读(2040) | 评论(0) | 转发(0) |