我编写了以下代码来执行此操作:
std::vector<int> vec;
std::vector<int> sortedRange;
// ...
bool hasCommonElement =
std::any_of(begin(vec), end(vec),
std::bind(std::binary_search, begin(sortedRange), end(sortedRange), _1));
编译器抱怨它无法找出我所说的二进制搜索的重载。你还有其他优雅的解决方案吗?或者它没有编译的一个很好的理由?
修改
binary_search<std::vector<int>::iterator>
。但它更不优雅。答案 0 :(得分:1)
您可以使用lambda而不是bind
来执行此操作:
bool hasCommonElement = any_of(begin(vec), end(vec), [&](int x) {return binary_search(begin(sortedRange), end(sortedRange), x);});
答案 1 :(得分:1)
你有两个问题。 binary_search是一个模板(不推导出参数),您需要限定占位符:
#include <vector>
#include <algorithm>
#include <functional>
int main( {
std::vector<int> vec;
std::vector<int> sortedRange;
bool hasCommonElement =
std::any_of(
begin(vec), end(vec),
std::bind(
std::binary_search<std::vector<int>::iterator, int>,
begin(sortedRange),
end(sortedRange),
std::placeholders::_1));
return 0;
}