首页 > 解决方案 > 如何创建一个可以使用自定义可比 C++ 的函数?

问题描述

我试图创建一个需要两个比较两个对象的函数,但我希望它可以与 std::sort 的任何可比对象一起使用。

换句话说,我希望这些代码在 C++ 中编译

bool mycomp(int a, int b) {return a<b;}
int main () {
   deque<int> qu;
   special_push(qu, 3);
   special_push(qu, 5, less<int>());
   special_push(qu, 5, mycomp);
}

到目前为止我已经尝试过:

template< typename _Compare > void push (deque<int> & qu,int val, _Compare comp = less<int>()) {
    while(qu.empty()==false &&  comp(val, qu.back())) {
      qu.pop_back();
    }
    qu.push_back(val);

}

标签: c++functiontemplates

解决方案


在修复了明显的拼写错误之后,您缺少的是模板参数的默认值:

#include <deque>
#include <functional>

using std::deque;
using std::less;

bool mycomp(int a, int b) {return a<b;}

template< typename _Compare = std::less<int> >
void special_push (deque<int> & qu,int val, _Compare __comp = less<int>()) {
    while(qu.empty()==false &&  __comp(val, qu.back())) {
      qu.pop_back();
    }
    qu.push_back(val);

}

int main () {
   deque<int> qu;
   special_push(qu, 3);
   special_push(qu, 5, less<int>());
   special_push(qu, 5, mycomp);
}

或者,您可以使用重载函数(这通常是 libstdc++ 在内部执行的操作,但我不知道有任何理由这样做)。

请注意,您可能还应该解决几个风格或迂腐的问题。


推荐阅读