仿函数 greater less

鼠扑  论坛元老 | 2025-3-10 23:28:25 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1045|帖子 1045|积分 3135

仿函数



  • 仿函数是一个类或布局体,通过重载 operator() 实现函数调用的效果。
  • 仿函数是一个对象,可以包含成员变量,用于存储状态。
  • 仿函数可以联合模板使用,使其支持多种范例。
  • 仿函数通常是内联的(inline),性能可能比普通函数指针更高。
仿函数的使用

将仿函数作为参数传递
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. struct Printer {
  5.     void operator()(int value) const {
  6.         std::cout << value << " ";
  7.     }
  8. };
  9. int main() {
  10.     std::vector<int> vec = {1, 2, 3, 4, 5};
  11.     // 使用仿函数 Printer 打印每个元素
  12.     std::for_each(vec.begin(), vec.end(), Printer());  // 输出 1 2 3 4 5
  13.     std::cout << std::endl;
  14.     return 0;
  15. }
复制代码
在 std::sort 中使用仿函数
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. struct GreaterThan {
  5.     bool operator()(int a, int b) const {
  6.         return a > b;
  7.     }
  8. };
  9. int main() {
  10.     std::vector<int> vec = {3, 1, 4, 2};
  11.     // 使用仿函数 GreaterThan 进行降序排序
  12.     std::sort(vec.begin(), vec.end(), GreaterThan());
  13.     // 输出排序后的结果
  14.     for (int num : vec) {
  15.         std::cout << num << " ";  // 输出 4 3 2 1
  16.     }
  17.     std::cout << std::endl;
  18.     return 0;
  19. }
复制代码
greater less

std::greaterstd::less头文件<functional><functional>在 std::sort 中的使用std::sort(vec.begin(), vec.end(), std::greater<int>()); // 降序排序std::sort(vec.begin(), vec.end(), std::less<int>()); // 升序排序在 std::priority_queue 中的使用std::priority_queue<int, std::vector<int>, std::greater<int>> pq; // 小根堆std::priority_queue<int> pq; // 默认大根堆与 Lambda 的关系[](int a, int b) { return a > b; }[](int a, int b) { return a < b; }
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表