如何在c++中使用sort()对类对象数组进行排序



我正在做一个编程问题,需要对类对象进行排序。

所以,我使用sort()对对象数组进行排序,但我不能这样做,我在某个地方读到它需要lambda表达式,但我还不知道它们。

所以,如果你能帮我解释一下lambda表达式,那就太好了。

#include<bits/stdc++.h>
using namespace std;
class CallLog{
public:
string pno;
int dur;
string da;
void setpno(string p_no) {pno = p_no;}
void setdur(int d) {dur = d;}
void setda(string dsa) {da = dsa;}
string getpno() {return pno;}
int getdur() {return dur;}
string getda() {return da;}
};
int main() {
int n;
cin >> n;
CallLog arr[n];
for(int i = 0; i < n; i++) {
string pno;
int dur;
string da;
cin >> pno >> dur >> da;
arr[i].setpno(pno);
arr[i].setdur(dur);
arr[i].setda(da);
}
sort(arr, arr+n, "what labmda expression to write?" );
for(int i = 0; i < n; i++) {
cout << "DialledNumber : " << arr[i].getpno() << ", Duration : " << arr[i].getdur() << ", Date : " << arr[i].getda() << "n";
}
}

我想根据int dur对这些对象进行排序。

排序是关于比较元素并知道哪个是<<;(即如果我把{5,3,1}归入{1,3,5},是因为1低于3,3低于5)

因此,这取决于排序算法要遵循哪种逻辑(例如,您可以按它们的成员int dur对它们进行排序)。sort()使用<运算符进行排序,因此您有两个选项:

  1. 重载<操作符,如下所示<=我建议您这样做,例如:
bool operator<(CallLog a, CallLog b)
{
return a.dur < b.dur;
}
  1. 您实际上可以使用lambda,就像在这个例子中一样<=请注意,即使它显示了如何使用lambda,它也表明编写<运算符会更好。同样在这里,有一个易于阅读的例子,关于如何排序传递函数到sort()

预定义的STL函数对象,位于FUNCTIONAL头文件中。函数对象对应于所有主要的c++操作符。在表中,字母T表示任何类,可以是用户编写的,也可以是基本类型。变量x和y表示类T的对象作为参数传递给函数对象。bool = greater(T, T) x>ybool = less(T, T) x <y&quot;。如果你愿意,你也可以编写自己的函数对象。>

最新更新