函子或布尔比较器

Functor or boolean comparator

我应该使用什么?布尔比较或 sCompare() 仿函数?为什么? 使用这两个选项之间有什么区别吗?

struct Dog
{
    int m_age{};
    int m_weigt{};
};

bool compare(const Dog& a, const Dog& b)
{
    return a.m_age > b.m_age;
}

struct sCompare
{
    bool operator()(const Dog& a, const Dog& b)
    {
        return a.m_age > b.m_age;
    }
};

int main()
{
    vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
    //sort(begin(dogs), end(dogs), compare); this
    //sort(begin(dogs), end(dogs), sCompare()); or this

    return 0;
}

你的两个比较器导致相反的顺序(< vs >)。除此之外,最大的区别是您不能在函数内定义函数,但可以在函数内定义类型。此外,lambda 表达式提供了直接的语法来做到这一点:

int main()
{
    vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
    sort(begin(dogs), end(dogs), [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;});
    // or 
    auto comp = [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;}
    sort(begin(dogs), end(dogs),comp); 

}