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

How to sort a very large vector of user defined type

本文关键字:向量 排序 非常 用户 定义 类型      更新时间:2023-10-16

我想对一个大的像素集合进行排序。

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

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

第1部分:我想学习当向量很小时的一般方法。我从未对向量进行过排序。读了很多关于它的书,看了很多视频,但我就是不明白。

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

提前Thx。

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());

只需使用std::sort。我在运行接近2GB进程限制的程序中使用过。"一百万"元素听起来可能很多,但在8字节时,仍然只有8MB。它甚至可能放在缓存中。

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

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