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

avatar
作者
猴君
阅读量:0

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!