按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; } } } } 课堂记录{ 公众: 整流罩; 字符串名; 整数合计; }; 无效排序名称(int a[],记录r[],int n) { 内部温度; 布尔交换=真; 对于(int pass=1;pass

按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; } } } } 课堂记录{ 公众: 整流罩; 字符串名; 整数合计; }; 无效排序名称(int a[],记录r[],int n) { 内部温度; 布尔交换=真; 对于(int pass=1;pass,c++,class,templates,non-member-functions,C++,Class,Templates,Non Member Functions,,可以将一个函子作为比较器传递给函数: 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) /*...*/ } 除非这是关于编写自己的排序例程的练习,否则您

,可以将一个函子作为比较器传递给函数:

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)
    /*...*/ 
}

除非这是关于编写自己的排序例程的练习,否则您应该使用
std::sort
。即使如此,您也可以查看
std::sort
如何让您传递自定义比较器并执行类似操作。

您可以将函子作为比较器传递给函数:

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)
    /*...*/ 
}

除非这是一个关于编写自己的排序例程的练习,否则您应该使用
std::sort
。即使这样,您也可以查看
std::sort
如何让您通过自定义比较器并执行类似操作。

您应该看看
std::sort
如何使用
std::sort
:这个答案是什么你的问题?
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
——所有这些都可以是:
std::swap(a[j],a[j+1]);
std::sort
std::sort
冒泡排序?你可能想学习一些更有效的排序算法,或者简单地使用标准库中的算法……你应该看看itu如何使用
std::sort
std::vector
:这回答了你的问题吗?
temp=A[j];A[j]=A[j+1];A[j+1]=temp;
--所有这些都可以是:
std::swap(a[j],a[j+1]);
冒泡排序?您可能想学习一些更有效的排序算法,或者简单地使用标准库中的算法。。。。