如何创建函数可能使用自定义可比C++?

How to create a function may use custom comparable C++?

本文关键字:自定义 C++ 创建 函数 何创建      更新时间:2023-10-16

我试图创建一个需要两个比较两个对象的函数,但我希望它可以与任何可比的 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);
}

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

#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++在内部所做的,但我不知道有任何理由这样做(。

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

你快到了。您缺少的只是默认类型Compare.我还推荐具有模板化运算符的新std::less<>

template <class Compare = std::less<>>
//                      ^~~~~~~~~~~~~
auto special_push(std::deque<int> & qu, int val, Compare comp = std::less<>{}) -> void
{
while(!qu.empty() && comp(val, qu.back()))
{
qu.pop_back();
}
qu.push_back(val);
}