在 C++ 中,std::set 是一个关联容器,它包含一组唯一的对象。默认情况下,std::set 使用 < 运算符对元素进行排序。如果你想要自定义排序规则,可以通过提供一个比较函数或比较类来实现。
以下是两种自定义排序规则的方法:
你可以定义一个函数,该函数接受两个参数并返回一个整数,表示它们之间的顺序关系。例如:
#include <iostream>
#include <set>
bool my_compare(int a, int b) {
    return a < b;
}
int main() {
    std::set<int, decltype(&my_compare)> my_set(my_compare);
    my_set.insert(3);
    my_set.insert(1);
    my_set.insert(4);
    my_set.insert(2);
    for (int x : my_set) {
        std::cout<< x << ' ';
    }
    return 0;
}
你可以定义一个类,该类包含一个名为 operator() 的成员函数,用于比较两个元素。例如:
#include <iostream>
#include <set>
class MyCompare {
public:
    bool operator()(int a, int b) const {
        return a < b;
    }
};
int main() {
    std::set<int, MyCompare> my_set(MyCompare());
    my_set.insert(3);
    my_set.insert(1);
    my_set.insert(4);
    my_set.insert(2);
    for (int x : my_set) {
        std::cout<< x << ' ';
    }
    return 0;
}
在这两个示例中,我们都定义了一个自定义的排序规则,使得 std::set 使用这个规则对元素进行排序。你可以根据需要修改比较函数或比较类的实现,以实现你想要的排序规则。