0

別のベクトル B の値に基づいてベクトル A をソートすることに関する他の投稿がいくつかあります。他のほとんどの回答では、構造体またはクラスを作成して値を 1 つのオブジェクトに結合し、std::sort を使用するように指示されています。

これらの2つのベクトルをソートするためにバブルソートを実装するコードを最適化する必要があるため、そのようなソリューションのパフォーマンスに興味があります。a を使ってvector<pair<int,int>> ソートしようと考えています。

私はブロブ追跡アプリケーション(画像分析)に取り組んでおり、以前に追跡されたブロブをビデオフレームで新しく検出されたブロブと照合しようとします。そこでは、各フレームを以前に追跡されたいくつかのフレームともちろん、見つけたブロブに対してチェックします前のフレームで。これを 1 秒あたり 60 回 (ウェブカメラの速度) で実行しています。

これを最適化するためのアドバイスをいただければ幸いです。最適化しようとしているコードは次のとおりです。

http://code.google.com/p/projectknave/source/browse/trunk/knaveAddons/ofxBlobTracker/ofCvBlobTracker.cpp?spec=svn313&r=313

重要: ベクトルのサイズが 5 を超えることはなく、ほとんどの場合、3 つのアイテムしかなく、並べ替えられないことを忘れていました (3 つのアイテムに対してハードコードすることもできますか?)

ありがとう

4

2 に答える 2

3

C++ は、アルゴリズムからや などのstd::sortソートされたコンテナまで、ソートのための多くのオプションを提供します。これらを常に最初の解決策として使用するようにしてください。「最適化されたバブル ソート」などは最後の手段としてのみ試してください。std::mapstd::set

于 2010-06-02T22:20:11.063 に答える
1

少し前にこれを実装しました。また、Aのソートされた値と同じ方法でベクトルBを注文することを意味していると思います.

Indexのソート順が含まれていdataます。

/** Sorts a vector and returns index of the sorted values
 * \param Index Contains the index of sorted values in the original vector
 * \param data The vector to be sorted
 */
template<class T>
void paired_sort(vector<unsigned int> & Index, const vector<T> & data)
{
    // A vector of a pair which will contain the sorted value and its index in the original array
    vector<pair<T,unsigned int>> IndexedPair;
    IndexedPair.resize(data.size());
    for(unsigned int i=0;i<IndexedPair.size();++i)
    {
        IndexedPair[i].first = data[i];
        IndexedPair[i].second = i;
    }
    sort(IndexedPair.begin(),IndexedPair.end());
    Index.resize(data.size());
    for(size_t i = 0; i < Index.size(); ++i) Index[i] = IndexedPair[i].second;
}
于 2010-06-02T22:20:59.223 に答える