为什么我们仍然需要定义自己的函数比较器

mr5*_*mr5 0 c++ stl

在一些stdtemplate的参数中,需要定义他/她自己的函数比较器less(a, b),more(a, b)那么std::some_template<T, *, myComparator()>,为什么呢?

A.B*_*.B. 5

比较器的目的是允许对已排序的stl容器中的对象进行排序.如果默认比较器不适合容器将容纳的对象类型,则只需提供自己的比较器.

例如,如果您要创建以下的std :: set struct,那么您需要编写自己的比较器.

struct Person
{
    std::string first_name, last_name, phone_number;
}
Run Code Online (Sandbox Code Playgroud)

默认比较器知道如何比较数字和字符串,但它不知道如何比较Person对象.这就是人们如何编写自定义比较器来通过last_name对Person对象进行排序的方法.

struct Person_Comparator
{
    bool operator()(const Person &a, const Person &b) const {
        return a.last_name < b.last_name;
    }
};
Run Code Online (Sandbox Code Playgroud)