修改以下代码#include "sortlevel.h" using namespace std; Compare<vector<int>> make_comp(list<sort_level> sortlevels) { vector<function<bool(vector<int>,vector<int>)>> func; for(auto sortlevel : sortlevels) { int i = sortlevel.column; switch (sortlevel.order) { case ASCEND: auto cmp = [i](vector<int> a,vector<int> b) { return a[i] < b[i]; }; func.push_back(cmp); break; case DESCEND: auto cmp = [i](vector<int> a,vector<int> b) { return a[i] < b[i]; }; func.push_back(cmp); break; default: break; } } Compare<vector<int>> comp(func); return comp; }
时间: 2024-02-16 09:15:56 浏览: 72
#include "sortlevel.h"
using namespace std;
Compare<vector<int>> make_comp(list<sort_level> sortlevels) {
vector<function<bool(vector<int>,vector<int>)>> func;
for(auto sortlevel : sortlevels) {
int i = sortlevel.column;
switch (sortlevel.order) {
case ASCEND:
func.push_back([i](vector<int> a,vector<int> b) { return a[i] < b[i]; });
break;
case DESCEND:
func.push_back([i](vector<int> a,vector<int> b) { return a[i] > b[i]; });
break;
default:
break;
}
}
Compare<vector<int>> comp(func);
return comp;
}
修改后的代码中,在 switch 语句中,我们使用 lambda 表达式来定义比较函数 cmp,而不是在每个 case 中都定义一个 cmp。此外,对于降序排序,我们修改了 lambda 表达式的实现,使其返回 a[i] > b[i]。最后,我们直接将 lambda 表达式 push_back 到 vector 中,避免了中间变量 cmp 的使用。
阅读全文