それを回避できる場合は、常にバイナリ検索ツリーよりもハッシュを優先する必要があります。ハッシュはツリーよりもメモリ オーバーヘッドが大きくなりますが、ハッシュが使用するすべてのメモリを 1 つの大きなブロックに割り当てることができます。ツリーの場合、追加されたノードごとに個別の割り当てが必要になるため、断片化が大きくなり、パフォーマンスが低下します。1000 個の異なるファイルから 1 バイトを読み取るよりも、1 つのファイルから 1000 バイトを読み取る方法と同様です。
ハッシュが機能しない場合は、順序付けが重要な場合です。たとえば、メモリ アロケータを記述していて、メモリの空きブロックをデータ構造に格納するとします。キーはブロックのサイズで、値はブロックへのポインタです。
メモリの要求では、このデータ構造を調べて、要求を満たす最小の(順序付けを意味します!) ブロックを見つける必要があります。たとえば、キーが 10、20、30 のブロックがあり、20 バイトのメモリの要求が届いた場合、2 番目のブロックを選択します。ハッシュマップはそれを簡単に行うことができます。
しかし、リクエストが 22 バイトの場合はどうなるでしょうか。値が 20 のキーがないため、ハッシュマップ全体を反復して、O(n) 操作である正しいキー (30) を見つける必要があります。しかし、ツリーを使用した場合、「特定のキーよりも大きい最小のキーを見つける」ことは O(log n) 操作です。