Rogue Wave バナー
前へマニュアルの先頭へ目次索引次へ

14.5 2 等分探索

標準 C++ ライブラリには、さまざまな 2 等分探索アルゴリズムが用意されています。これらのアルゴリズムはすべて、近似 log n 比較だけを実行します。この n は、引数によって記述される範囲内の要素数です。これらのアルゴリズムは、vectordeque から生成されるような、ランダムアクセス反復子に適用されるときが最も効率的で、この場合も総じて近似 log n 演算を実行します。ただし、list により生成されるような非ランダムアクセス反復子にも適用され、この場合は一次数のステップを実行します。2 等分探索を set または multiset データ構造に適用することは、正当ではあっても必要というわけではありません。これは、これらのコンテナクラスには独自の検索方法があり、そのほうが効率的だからです。

汎用アルゴリズム binary_search() は、シーケンスに引数と等価の値が含まれる場合は true を返します。等価であるとは、Compare(value, arg)Compare(arg, value) がいずれも false であることです。このアルゴリズムは次のように宣言されます。

また、一致する値の位置を知ることが重要な場合もあります。この情報は、次のように定義されるアルゴリズムのコレクションによって返されます。

アルゴリズム lower_bound() は、反復子として、順序を変えずに引数を挿入できる最初の位置を返しますが、アルゴリズム upper_bound() は、最後の位置を検出します。これらが一致するのは、要素が現在シーケンス内にない場合に限られます。これらのアルゴリズムは、反復子の対を返すアルゴリズム equal_range() で共に実行することができます。

プログラム例では、これらの関数は乱数 vector に使用されています。

前へマニュアルの先頭へ目次索引次へ
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月