📜  C++ STL-Set.operator<()(1)

📅  最后修改于: 2023-12-03 14:39:51.692000             🧑  作者: Mango

C++ STL Set.operator<()

概述

operator<() 是 C++ STL Set 容器的一个成员函数,主要用于比较两个元素的大小关系。在 Set 容器的内部实现中,元素默认按照升序排列,并且使用 operator<() 函数作为元素比较的依据。

函数原型
bool operator< (const T& x, const T& y);

其中,T 是元素的类型,x 和 y 是待比较的两个元素。

实现方式

在默认情况下,operator<() 的实现方式是使用 < 运算符,比如:

template <typename T>
bool operator< (const T& x, const T& y)
{
    return x < y;
}

上述代码中,返回值为 x < y,这意味着默认情况下元素的大小关系就是运算符 < 的比较结果。

另外,我们也可以自定义 operator<() 函数,实现自定义的大小比较方式。例如,以下代码实现了一个以人名的长度为比较依据的 Person 类:

class Person
{
    public:
        std::string name;
        int age;
        bool operator< (const Person& other) const
        {
            return name.size() < other.name.size();
        }
};

上述代码中,operator<() 函数返回值为 name.size() < other.name.size(),也就是说,Person 类的大小关系是按照姓名长度的大小关系来判断的。

示例

以下示例代码演示了 Set 容器中元素大小比较的方式:

#include <iostream>
#include <set>

int main()
{
    // 使用默认的 operator<() 函数
    std::set<int> intSet = {4, 2, 1, 3};
    for (const auto& i : intSet)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    // 自定义 operator<() 函数
    std::set<Person> personSet = {{"John", 20}, {"James", 25}, {"Lucas", 18}};
    for (const auto& p : personSet)
    {
        std::cout << p.name << "(" << p.age << ")" << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上代码输出结果为:

1 2 3 4
Lucas(18) John(20) James(25)

由此可见,Set 容器的元素默认按照升序排列,并且使用 operator<() 函数作为元素比较的依据。如果我们自定义 operator<() 函数,就可以实现元素的自定义比较方式。