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