目前我正在尝试生成组合,我正在使用以下代码:
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
template<class RandIt, class Compare>
bool next_combination(RandIt first, RandIt mid, RandIt last)
{
std::sort(mid, last, std::bind(std::less<int>(), std::placeholders::_2
, std::placeholders::_1));
return std::next_permutation(first, last, std::less<int>());
}
使用g ++无法编译说:
next_combo.cpp: In function ‘bool next_combination(RandIt, RandIt, RandIt)’:
next_combo.cpp:10: error: ‘bind’ is not a member of ‘std’
next_combo.cpp:10: error: ‘std::placeholders’ has not been declared
next_combo.cpp:11: error: ‘std::placeholders’ has not been declared
我认为std :: placeholders是在功能上声明的,但现在我很困惑。 我应该只使用提升吗?
该项目的其余部分也使用c ++ 0x,那么有没有更好的方法使用c ++ 0x功能来编写它?
非常感谢任何帮助:)
答案 0 :(得分:7)
当然有更好的方法。使用std :: greater_equal而不是执行上述操作。检查here功能中还有什么。
忘了说 - 要使用占位符,您需要启用c ++ 0x功能。
答案 1 :(得分:5)
为什么不使用lambdas而不是繁琐的绑定?如果使用C ++ 0x,则可以编写
std::sort(v.begin(), v.end(), [](int l, int r)->bool { return l > r; });
代替。请注意,您不需要在那里明确指定返回类型。我这样写是为了让它更清晰。