c++

如何自定义 C++ Set 的排序规则

小樊
86
2024-08-09 01:13:42
栏目: 编程语言

要自定义 C++ Set 的排序规则,可以通过传递一个 lambda 函数或者函数对象作为 Set 的比较函数来实现。比如,如果要按照字符串长度递增的顺序排序 Set,可以这样实现:

#include <iostream>
#include <set>
#include <string>

struct CompareStringByLength {
    bool operator() (const std::string& a, const std::string& b) const {
        return a.length() < b.length();
    }
};

int main() {
    std::set<std::string, CompareStringByLength> stringSet;

    stringSet.insert("hello");
    stringSet.insert("world");
    stringSet.insert("c++");

    for (const auto& str : stringSet) {
        std::cout << str << std::endl;
    }

    return 0;
}

在这个例子中,我们定义了一个名为 CompareStringByLength 的函数对象,它重载了 () 运算符,用来比较两个字符串的长度。然后将这个函数对象作为 Set 的第二个模板参数传递给 Set,即 std::set<std::string, CompareStringByLength> stringSet;。这样 Set 就会使用 CompareStringByLength 中定义的比较规则来排序元素。

除了函数对象之外,还可以通过 lambda 函数来实现自定义的排序规则,如:

#include <iostream>
#include <set>
#include <string>

int main() {
    auto compareStringByLength = [](const std::string& a, const std::string& b) {
        return a.length() < b.length();
    };

    std::set<std::string, decltype(compareStringByLength)> stringSet(compareStringByLength);

    stringSet.insert("hello");
    stringSet.insert("world");
    stringSet.insert("c++");

    for (const auto& str : stringSet) {
        std::cout << str << std::endl;
    }

    return 0;
}

这里我们使用了 lambda 函数 compareStringByLength,并在 Set 的构造函数中传递了这个 lambda 函数,来实现自定义的排序规则。

0
看了该问题的人还看了