前に日記で書いた, 自己組織化二分探索木であるSplay Treeは struct splay { splay *left; splay *right; void *item; }; というデータ構造を持っているため, データ構造へのポインタのきっかり3倍の 記憶容量を必要とする。 順番は多くの場合関係ないので, こうした動的なデータ構造には本来ハッシュを 使えばいいはず だが, 普通のハッシュでは不要なメモリが沢山確保される可能性があるため, スプレー木を使っていた。 ハッシュテーブルが1つなら大した問題ではないですが, テーブル自体が何万個も あったりすると, そのロスは膨大なものになります。 最近, 開発環境をCからC++に変えたため(理由はそのうち), Googleの提供している Memory-efficientな Google Sparse Hash が使えるようになったので,