我有这样的结构:
struct db {
string name,sur;
int num;
};
并声明了一个db结构数组:
struct db a[10];
并且[]的每个成员都填写了姓名,姓氏和号码,但可能会出现多次相同的号码。 我需要对数字进行排序,并打印结果,即按每个结构的数量进行排序,并打印每个行中的名称,sur和num,从最小的num开始到最大。我不知道怎么做,请帮助我。
答案 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;'运营商定义。