使用带有类指针的qsort()

时间:2011-02-07 19:37:20

标签: c++ visual-studio-2010 pointers std qsort

我使用内置函数qsort()class item指针的向量进行排序。

class item {
int value;
vector<char> c;
...
...
};

//Declaration of vector
vector<item*> items;

//Function Call
qsort(&items, items.size(), sizeof(item*), value_sort);

int value_sort(const void* a, const void* b)
{
item* pa = *(item**) a;
item* pb = *(item**) b;

if (pb->value < pa->value)
    return 1;
else if (pa->value < pb->value)
    return -1;
return 0;
}

在调试器模式下,指针papb都指向有效位置。由class itemspa指向的pb的所有数据成员集包含垃圾值。我哪里弄错了?我也不确定双指针的用法。

感谢。

3 个答案:

答案 0 :(得分:6)

我同意使用std::sort建议的答案。但是暂时忽略这一点,我认为你的问题的原因是你传递的是vector对象的地址,而不是向量的内容。试试这个:

//Function Call
qsort(&items[0], items.size(), sizeof(item*), value_sort);

然后在尝试之后,请返回并使用std::sort代替。 8V)

答案 1 :(得分:4)

不要在C ++中使用qsort,而是使用std::sort

int value_sort(item* pa, item* pb)
{
    return pa->value < pb->value;
}

std::sort(items.begin(), items.end(), value_sort);

答案 2 :(得分:3)

使用algorithm中的std :: sort。它易于使用,类型安全且比qsort更快,并且没有指针问题:)。

#include <algorithm>

inline bool comparisonFuncion( item *  lhs,item  * rhs)
{
    return lhs->value<rhs->value;
}

std::sort(items.begin(),items.end(),comparisonFunction);