通常、STL は速度を重視して構築されています。ただし、map および set データ構造には upper_bound と lower_bound しかなく、入力キーより小さい最大のキーを持つエントリを取得する操作はありませんk
。どうしてこれなの?lower_bound
これを取得するには単純に anと aを実行できることはわかってい--it
ますが、データ構造によっては、別のエントリを検索してから 1 ステップ戻るよりも、正しいエントリをすぐに検索する方が効率的かもしれません。
たとえば、std::map
赤黒木、つまり二分探索木を使用します。によって返されるupper_bound
要素がルートよりも大きい最小の要素である場合、--it
O(log n) の追加コストを調べて、ルートに戻る必要があります。
これが Java の場合、設計上の決定は問題ありません。しかし、STL は最大速度のために構築されているのに、なぜこの操作が省略されたのでしょうか?
明確化:std::upper_bound
どちらが別のコンパレータを取ることができるかについて話しているのではなく、std::map
とのメソッドについて話しているのstd::set
です。