如何对用户定义类型的非常大的向量进行排序
How to sort a very large vector of user defined type
我想对一个大的像素集合进行排序。
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
作为一个容器,它会自动为您提供排序的序列。
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序