我使用内置函数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;
}
在调试器模式下,指针pa
和pb
都指向有效位置。由class items
或pa
指向的pb
的所有数据成员集包含垃圾值。我哪里弄错了?我也不确定双指针的用法。
感谢。
答案 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);