无法解释此C ++代码

时间:2016-03-04 23:32:05

标签: c++ struct operator-overloading inline

有关已发布代码的背景信息: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操作员()”正在做什么,我会很感激,因为我之前从未见过这些,而且我通过阅读教科书无法理解。 谢谢你的帮助!

2 个答案:

答案 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