📅  最后修改于: 2023-12-03 14:39:51.692000             🧑  作者: Mango
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<()
函数,就可以实现元素的自定义比较方式。