温馨提示×

c++ set遍历 能自定义比较器吗

c++
小樊
81
2024-11-26 02:57:03
栏目: 编程语言

是的,在C++中,你可以使用自定义比较器(也称为自定义排序函数或自定义谓词)来遍历std::set。自定义比较器允许你定义自己的排序规则,而不仅仅是使用默认的operator<

要使用自定义比较器,你需要创建一个函数对象(也称为仿函数),并将其作为模板参数传递给std::set。以下是一个示例:

#include <iostream>
#include <set>
#include <functional>

// 自定义比较器
struct CustomComparator {
    bool operator()(int a, int b) const {
        return a > b; // 降序排列
    }
};

int main() {
    // 使用自定义比较器创建 std::set
    std::set<int, CustomComparator> my_set = {3, 1, 4, 1, 5, 9};

    // 遍历 std::set
    for (const auto& element : my_set) {
        std::cout << element << " ";
    }

    return 0;
}

在这个示例中,我们创建了一个名为CustomComparator的结构体,并为其定义了一个operator()函数。这个函数接受两个整数参数,并返回一个布尔值,表示第一个参数是否应该排在第二个参数之前。在这个例子中,我们定义了一个降序排列的比较器。

然后,我们使用CustomComparator作为模板参数创建了一个std::set,并将一些整数添加到其中。最后,我们使用范围for循环遍历std::set并打印其元素。由于我们使用了自定义比较器,因此输出的元素将按照降序排列。

0