我有我的qsort比较函数的问题。我有一个类型为ListEntry的数组,mGames。一个ListEntry看起来是这样的:qsort在c没有排序我的结构数组
struct ListEntry
{
bool mLocal;
int mLastTurnTime;
};
这实际上相当过于简单,在那里有更多的数据,但它不是在排序中使用,所以我省略了。无论如何,我正在努力使得将mLocal设置为true的条目先排序。问题是,我无法顺序排列我的数组。这里的比较函数:
int compare(const void* a, const void* b)
{
ListEntry* e1 = (ListEntry*)a;
ListEntry* e2 = (ListEntry*)b;
if (e1->mLocal && e2->mLocal)
return 0;
return e1->mLocal ? -1 : 1;
}
和我的呼叫到它:
qsort(mGames, mNumGames, sizeof(ListEntry), compare);
其中mNumGames是游戏的阵列中的数(7在我的当前测试的情况),和mGames定义为:
ListEntry mGames[MAX_GAMES]; // where MAX_GAMES is 50
当我踏进比较法,E1和E2包含其数据如预期(如,我不访问垃圾内存或向右没提领的东西)。
奇怪的是,无论我如何改变比较方法,我都无法得到改变的顺序。我必须忽略一些非常明显的东西。
比较器中的按值分配是否意外?您不应该取消引用指针,而是将转换的结果分配给另一个指针。我想我们需要更多的代码。 – pmr
啊,很好的电话。我已经在我的代码中更改了它,只是使用指针值而不是解除引用。 – Architekt
顺便问一下,这是C(标签,使用qsort)还是C++(变量声明中没有struct关键字,bool,void指针的转换)?在前一种情况下,它必须是一些奇怪的扩展(我知道C99有bool,但是直接使用struct没有struct关键字?),在后一种情况下,不要使用'qsort',反正使用'std :: sort'。 –