c++ - 如何创建一个可以使用自定义可比 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);
}
解决方案
在修复了明显的拼写错误之后,您缺少的是模板参数的默认值:
#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++ 在内部执行的操作,但我不知道有任何理由这样做)。
请注意,您可能还应该解决几个风格或迂腐的问题。
推荐阅读
- c# - 如何将 Office Addin 从非活动状态切换为活动状态?
- c++11 - VideoCapture(0) 和 VideoCapture.open(0) 似乎不适用于 CMake (UBUNTU) (OpenCV4)
- python - 如何从本地 python 脚本调用我的 AWS Lambda 函数?
- http - 如何将文件系统制作为 http.Handler
- python - 在对数刻度上产生均匀间隔的值(如 `np.linspace()`,但在对数刻度上)
- python - TensorFlow 模型损失的近似周期性跳跃
- javascript - Babel 输出中这些注释的目的是什么?
- bash - 如何通过 BASH SCRIPT 中的用户定义变量更改 IP 地址?
- elasticsearch - 基于由另一个参数链接的一系列日志中的一个参数在 Kibana 中进行过滤
- tensorflow - 在 Tensorflow v2 中替换 tf.contrib.predictor.from_saved_model