请帮助 - 在结构中排序整数

时间:2010-06-07 14:48:36

标签: c++ sorting struct

我有这样的结构:

struct db {
 string name,sur;
 int num;
};

并声明了一个db结构数组:

struct db a[10];

并且[]的每个成员都填写了姓名,姓氏和号码,但可能会出现多次相同的号码。 我需要对数字进行排序,并打印结果,即按每个结构的数量进行排序,并打印每个行中的名称,sur和num,从最小的num开始到最大。我不知道怎么做,请帮助我。

4 个答案:

答案 0 :(得分:6)

首先,在C ++中,您不需要每次都重复“struct”。

您可以使用std :: sort()函数并为其提供自定义谓词。

bool db_cmp(const db &left, const db &right)
{
    return left.num < right.num;
}

//...

db a[10];
std::sort(a, a + 10, db_cmp);
// then, display the contents of a..

答案 1 :(得分:4)

您可以使用qsort

int db_comparator ( const void * elem1, const void * elem2 )
{
  struct db *first = (struct db *) elem1, *second = (struct db *) elem2;
  return first->num - second->num;
}

qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), db_comparator);

答案 2 :(得分:1)

您是否必须实施自己的排序算法?

如果是这样,我强烈建议在Google中输入“排序算法”和/或查看wikipedia页面。

冒泡排序真的很容易实现(但是排序算法很差)。它将归结为检查每个数字彼此,然后交换它们是一个比另一个少。字符串排序也很容易,因为strcmp返回的值小于0,字符串“less”比被比较的字符串大于0,而“big”大于0。

如果您不需要实现自己的算法,请使用std :: sort。

答案 3 :(得分:0)

您可以在结构中添加比较方法:

struct db
{
  string name;
  string sur;
  int    num;

  bool operator <(const db& other)
  {
    if (name == other.name)
    {
      return sur < other.sur;
    }
    return name < other.name;
};

现在您可以使用std::sort算法,因为您的对象具有'&lt;'运营商定义。