1

大量のピクセルのコレクションを並べ替えたい。

typedef char HexGetal;
typedef unsigned int NatuurlijkGetal;

struct  Pixel{
    HexGetal Blue;
    HexGetal Green;
    HexGetal Red;
};
struct Palet{   
    Pixel Kleur;
    NatuurlijkGetal Aantal; 
};
    vector <Palet> MyContainer;

    NatuurlijkGetal Seeds[10]={1, 25, 55, 7, 3, 149, 6, 7, 1, 55};


    Palet LoopPalet;


    LoopPalet.Kleur.Blue = 0;
    LoopPalet.Kleur.Green = 0;
    LoopPalet.Kleur.Red = 0;


    for(NatuurlijkGetal Looper = 0; Looper < 10;Looper++)
    {
        LoopPalet.Aantal = Seeds[Looper];
        MyContainer.push_back(LoopPalet);
    }

タイプ「Palet」の作成後、「MyContainer」という名前のパレットのベクトルを作成し、初期化します。

ここで、フィールド「Aantal」に基づいて並べ替えたいと思います。それ、どうやったら出来るの?私はおそらく2つの異なる方法を探しています。

パート 1: ベクトルが小さい場合にこれを行う一般的な方法を学びたい。ベクトルをソートしたことはありません。それについて多くのことを読み、ビデオを見ましたが、私はそれを理解していません.

パート 2: このベクトルは、後で使用すると 100 万を超える要素を持つことになります。そのため、コピー操作の量を制限するために、よりスマートなアプローチが必要になる場合があります。

事前にt​​hx。

4

3 に答える 3

3

を使用するだけstd::sortです。2GB のプロセス制限近くで実行されるプログラムで使用しました。「100 万」の要素というと多くのように聞こえるかもしれませんが、8 バイトでも 8 MB しかありません。キャッシュに収まる場合もあります。

于 2013-08-12T06:44:41.440 に答える
3
struct mycomp
{
     bool operator() (const Palet& p1, const Palet& p2)
    {
        return (p1.Aantal < p2.Aantal); //Change the operator as required
    }
};

std::sort(MyContainer.begin(), MyContainer.end() , mycomp());
于 2013-08-12T06:44:57.757 に答える