我想对大量像素进行排序。
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万个元素。因此,可能需要一种更智能的方法来限制复制操作的数量。
提前谢谢。答案 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
作为容器,它会自动为您提供已排序的序列。