原点からの距離の昇順で並べ替えられた std::pair の並べ替えられたリスト
pair<float,float> origin;
list<pair<float,float> > points;
float distance=19.0f;
distance(19.0f) より大きい距離を持つリストの最初の要素を見つける方法は? リストバイナリ検索に適用するには? (反復は十分に効率的ではありません。リストは長いです) ? よりエレガントなソリューションはありますか?
リストは二分探索にはあまり適していません。これは、リスト内の要素に順番にしかアクセスできない(要素k
から要素にしかアクセスできないk-1
) ためです。そのため、リストを使用する必要がある場合は、より大きな最初の要素を直線的に検索する以外に選択肢はありません。よりもdistance
。
二分探索を行いたい場合はvector
、要素への直接アクセスを可能にするコンテナなどを使用できます (のようにmyvector[i]
)
リンクされたリストで二分探索を行うことはできません。vector
またはに置き換えることを検討してくださいmultiset
。
リンクされたリストでバイナリ検索を効率的に実行することはできません。これは、ランダム アクセス時間がO(n)
であるのに対しO(1)
、バイナリ検索が正しく機能するためには が必要だからです。
リストを反復処理する必要があります。別のデータ構造を選択しない限り、他に方法はありません。
find_ifを使用します。前述のように、リスト内のランダムな要素にアクセスできないため、binary_search
on では使用できません。std::list
boost::flat_set
通常のベクトルの上に順序付けられたコンテナのセマンティクスを実装するものを使用できます。