0

这就是问题所在。我已经定义了一个结构:

typedef struct {

        long t;
        long M;
        long double coeff;
} Info;

我只能知道以下程序中结构的数量,因此我写道:

Info p = (Info ) malloc (sizeof(Info) * sum); (其中 sum 是一个长整数)

现在我想根据'coeff'按升序对结构数组进行排序。

我如何在 VC++6.0 中实现它?

多谢!

4

2 回答 2

2

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;
};
于 2013-04-17T16:37:09.507 回答
2

你可以实现一个比较函数然后调用std::sort。

bool comparator(const Info& p1, const Info& p2)
{
  return p1.coeff < p2.coeff;
}

您还可以<在结构定义中重载运算符,而不是编写独立的比较函数。

然后调用 std::sort

std::sort(A, A+sum, comparator);

假设这A是你的结构数组。

于 2013-04-17T16:36:14.123 回答