如何解决按类 C++
所以,我基本上学习了 C++ 中的类和模板函数。假设我有一个班级学生的记录,包括他们的卷号、姓名和总分。 我正在使用索引排序对记录进行排序。现在可以根据姓名、卷或总分进行排序。如何使用模板函数合并所有三个?
class record{
public:
int roll;
string name;
int total;
};
void sort_name(int a[],record r[],int n)
{
int temp;
bool xchange = true;
for(int pass=1;pass<n&&xchange==true;pass++)
{
for(int j=0;j<n-pass;j++)
{
if(r[a[j]].name>r[a[j+1]].name)
{
temp=a[j];
a[j]=a[j+1];
a[j+1] = temp;
}
}
}
}
因此,我不想一次又一次地编写函数,而是想用 r[a[j]].roll 和 r[a[j]].total 替换 r[a[j]].name。这可能吗?
解决方法
您可以将函子作为比较器传递给函数:
template <typename Comparator>
void my_sort(int a[],record r[],int n,Comparator comp)
{
/*...*/
if (comp(r[a[j],r[a[j+1]]) // instead of if(r[a[j]].name>r[a[j+1]].name)
/*...*/
}
然后您可以使用自定义谓词调用它,例如比较 name
成员:
my_sort(a,r,n,[](const record& a,const record& b) { return a.name < b.name; });
除非这是关于编写自己的排序例程的练习,否则您应该使用 std::sort
。即便如此,您还是可以看看 std::sort
如何让您传递自定义比较器并执行类似操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。