[英]How to sort class objects array using the sort() in C++
我正在做一个编程问题,需要对 class 对象进行排序。
所以,我使用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()
使用<
运算符进行排序,因此您有两种选择:
<
运算符,如下所示<= 我建议您这样做,例如:bool operator<(CallLog a, CallLog b)
{
return a.dur < b.dur;
}
预定义的 STL function 对象,位于 FUNCTIONAL header 文件中。 function 对象对应于所有主要的 C++ 运算符。 在表中,字母 T 表示任何 class,无论是用户编写的还是基本类型。 变量 x 和 y 表示 class T 的对象,传递给 function object 作为 ZDBC11CAA5BDA29F77E6FB4EDDABD8。 “布尔 = 更大(T,T)x > y 布尔 = 更少(T,T)x < y”。 此外,如果您愿意,您可以编写自己的 function 对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.