如何创建函数可能使用自定义可比C++?
How to create a function may use custom comparable 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++在内部所做的,但我不知道有任何理由这样做(。
请注意,您可能还应该解决一些风格或迂腐的问题。
你快到了。您缺少的只是默认类型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);
}
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- 如何在QT中的自定义视频小工具t上绘制矩形