如何对用户定义类型的非常大的向量进行排序

时间:2013-08-12 06:37:43

标签: c++ sorting vector

我想对大量像素进行排序。

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万个元素。因此,可能需要一种更智能的方法来限制复制操作的数量。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

只需使用std::sort即可。我已经在接近2GB进程限制的程序中使用过。 “一百万”元素可能听起来很多,但是8字节仍然只有8 MB。它甚至可能适合缓存。

答案 1 :(得分: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());

答案 2 :(得分:1)

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

您还可以考虑使用std::map作为容器,它会自动为您提供已排序的序列。