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

   2024-10-02 5000
核心提示:要自定义 C++ Set 的排序规则,可以通过传递一个 lambda 函数或者函数对象作为 Set 的比较函数来实现。比如,如果要按照字符串长

要自定义 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 函数,来实现自定义的排序规则。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号