1

四分木で最も近い N ポイントを検索しようとしており、STL プライオリティ キューを使用して、見つかったポイントを保存します (クエリ ポイントからの距離でソートされます)。

クエリ ポイントからの最大距離を超えるポイントがキューに追加されることはありません。ただし、検索で返されるアイテムの数も減らしたいと思います。現在、最大距離よりもクエリ ポイントに近いすべてのポイントを追加し、キューから上位 N ポイントのみを読み取ります。

テストでは、これは遅すぎます。最大距離よりも近くにすべてのポイントを追加するだけでは、ポイントが追加されるにつれて速度が低下します。代わりに、現在キューにあるポイントが N よりも少ない場合、または問題のポイントがキューの N 番目のポイントよりもクエリ ポイントに近い場合にのみ、キューにポイントを追加したいと思います。オーバーライドされ、キュー内の要素の数は増えません。

STL優先キューでこれを行う方法はありますか、それとも自分で書く唯一のオプションですか?

4

1 に答える 1

0

それらを繰り返しながら、現在の N 個の最良のポイントを知る必要がありますか? そうでない場合は、すべてのポイントをランダム アクセス コンテナー (例: std::vector) に追加し、最後に呼び出しstd::partial_sortて N ベストを取得することができます。

優先キューで本当にそれを行う必要がある場合は、std::priority_queue十分ではありません。std::algorithm基になるコンテナーにアクセスできるように、ヒープ関数を使用して何かをまとめることができます。

于 2013-03-29T20:52:21.730 に答える