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”的 Palet 向量,并对其进行初始化。

现在我想根据“Aantal”字段对其进行排序。我怎么做?我可能正在寻找两种不同的方式。

第 1 部分:我想学习在矢量较小时执行此操作的一般方法。我从未对向量进行排序。阅读了很多关于它的内容并观看了视频,但我就是不明白。

第 2 部分:此向量稍后使用时将拥有超过 100 万个元素。所以也许需要一种更聪明的方法来限制复制操作的数量。

提前谢谢。

4

3 回答 3

3

只需使用std::sort. 我在运行接近 2GB 进程限制的程序中使用过。“一百万”个元素可能听起来很多,但在 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 回答
1

我个人会使用std::sort或类似的,但我不会直接在std::vector. 我会用比较器对我的大元素的引用进行排序。每个引用都是一个简单的容器,带有一个指向大元素的智能指针。

您还可以将std::map其用作自动为您提供排序序列的容器。

于 2013-08-12T06:58:06.037 回答