使用std :: placeholder需要哪些库?

时间:2010-12-23 07:25:17

标签: c++ bind

目前我正在尝试生成组合,我正在使用以下代码:

#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功能来编写它?

非常感谢任何帮助:)

2 个答案:

答案 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; });

代替。请注意,您不需要在那里明确指定返回类型。我这样写是为了让它更清晰。