【发布时间】:2012-07-27 15:23:42
【问题描述】:
通常对结构对象数组进行排序很容易。考虑结构数组(AOS)
#define ITEMS 10
typedef struct MyStruct
{
char a;
int b;
}tMyStruct;
tMyStruct arr_mystruct[ITEMS];
我首先用 对的值填充这个结构数组。
如果我现在想根据整数字段对这个结构数组进行排序,我可以使用 libc qsort 函数通过使用一个接受两个整数参数的比较函数来完成。
现在考虑我把上面AOS格式的结构换成SOA格式
#define ITEMS 10
typedef struct MyStruct
{
char a[ITEMS];
int b[ITEMS];
}tMyStruct;
tMyStruct mystruct;
现在我仍然可以使用 qsort 对整数数组 b 字段进行排序,但是这次我需要另外对 a(字符数组)w.r.t b 的排序顺序进行排序。
所以我的问题是,对以 SOA 格式而不是通常的 AOS 格式布局的数据进行排序的有效方法是什么?
谁能帮我解决这个问题?谢谢!
【问题讨论】:
-
a w.r.t sorting order of b。你能帮我翻译一下吗... -
@AljoshaBre 表示'a 相对于 b 的排序顺序'
-
我认为他想对数组
a和b进行排序,以便它们都根据b的数据进行排序。换句话说,将所有数据对放在一起。 -
您已使用 C++ 标记此内容,您对 C++ 解决方案感兴趣吗?那些不能在 C 中工作的?
-
如果
std::sort只能通过std::less和std::swap起作用,那么您可以通过提供一个自定义std::swap来解决您的问题,该std::swap也可以处理as。否则真的没有“好的”解决方案。