有关已发布代码的背景信息:PayRoll是该类的名称。 personSalary是一个double类型变量,personAge是一个整数类型变量。给出的代码是按年龄或工资对列表进行排序。
struct less_than_salary
{
inline bool operator() (const PayRoll& struct1, const PayRoll& struct2)
{
return (struct1.personSalary < struct2.personSalary);
}
};
struct less_than_age
{
inline bool operator() (const PayRoll& struct1, const PayRoll& struct2)
{
return (struct1.personAge < struct2.personAge);
}
};
我想帮助理解给定代码的这一部分。我已经尝试过阅读 struct 用于我所理解的内容,它基本上作为一个类运行,并允许您同时使用多种类型的变量。如果我错了,在这种情况下用于什么结构? 另外,如果有人解释了“内联bool操作员()”正在做什么,我会很感激,因为我之前从未见过这些,而且我通过阅读教科书无法理解。 谢谢你的帮助!
答案 0 :(得分:2)
这两个结构都是所谓的&#34;仿函数&#34;的实现。给出了像
这样的用法 PayRoll x;
PayRoll y
// initialise x and y
less_than_salary f;
if (f(x,y)) // this calls less_than_salary::operator()(x,y)
std::cout << "X has lower salary than Y\n";
else
std::cout << "X has higher salary than Y\n";
另外,给定一个PayRoll
数组,可以排序
PayRoll a[20];
// initialise elements of a
less_than_salary f;
std::sort(a, a+20, f); // will sort in order of ascending salary
std::sort(a, a+20, less_than_salary()); // does same as preceding two lines
也可以使用标准容器(std::vector<PayRoll>
等)。
less_than_age
允许基本上做同样的事情,但使用年龄而不是工资作为排序标准。
这里没有功能重载。两种结构类型都提供operator()
,但这不会重载。
答案 1 :(得分:1)
这样的结构可以在STL函数sort
中使用,它可以在std::list
等数据结构中使用。
#include <list>
#include <iostream>
int main() {
std::list<int> example = {9,8,7,6,5,4,3,2,1};
struct {
bool operator()( const int lhs, const int rhs) {
return lhs < rhs;
}
} compare_list;
example.sort(compare_list);
for(auto &i : example) {
std::cout<<i<<" ";
}
}
输出:
1 2 3 4 5 6 7 8 9
要了解其工作原理,请考虑以下事项:
//..
testS(compare_list);
//..
template <typename T>
void testS(T t) {
std::cout<< t(4,5) << "\n";
std::cout<< t(5,4) << "\n";
}
输出为
1
0