这就是问题所在。我已经定义了一个结构:
typedef struct {
long t;
long M;
long double coeff;
} Info;
我只能知道以下程序中结构的数量,因此我写道:
Info p = (Info ) malloc (sizeof(Info) * sum); (其中 sum 是一个长整数)
现在我想根据'coeff'按升序对结构数组进行排序。
我如何在 VC++6.0 中实现它?
多谢!
这就是问题所在。我已经定义了一个结构:
typedef struct {
long t;
long M;
long double coeff;
} Info;
我只能知道以下程序中结构的数量,因此我写道:
Info p = (Info ) malloc (sizeof(Info) * sum); (其中 sum 是一个长整数)
现在我想根据'coeff'按升序对结构数组进行排序。
我如何在 VC++6.0 中实现它?
多谢!
将std::sort与合适的比较函子一起使用:
bool cmp(const Info& lhs, const Info& rhs)
{
return lhs.coeff < rhs.coeff;
}
然后
#include <algorithm>
std::sort(p, p + sum, cmp);
假设是指向包含对象p
的数组的第一个元素的指针。sum
Info
但在 C++ 中,您通常更喜欢std::vector
动态分配的数组:
std::vector<Info> v(sum); // contains sum default constructed Infos
然后
std::sort(v.begin(), v.end(), cmp);
您也不需要typedef
语法:
struct Info {
long t;
long M;
long double coeff;
};
你可以实现一个比较函数然后调用std::sort。
bool comparator(const Info& p1, const Info& p2)
{
return p1.coeff < p2.coeff;
}
您还可以<
在结构定义中重载运算符,而不是编写独立的比较函数。
然后调用 std::sort
std::sort(A, A+sum, comparator);
假设这A
是你的结构数组。