我试图在对向量上执行二进制排序,并且一旦找到就返回迭代器,但是我似乎遇到了这个问题。最初我有这样的东西,t是int类型的向量。
if (std::binary_search(t.begin(), t.end(), 5, *it))
{
if (it != t.end())
{
cout << "FOund";
}
}
然而,这似乎不起作用(编译问题)我认为问题是因为我有一对而不是正常的向量,所以想知道是否有人有任何网站链接我可以阅读?##
收到的错误如下:
术语不评估为采用2个参数的函数
答案 0 :(得分:0)
你真的想做什么?您想如何在对数组中找到一个整数?您只能在对向量中找到给定的对。
如果你想找到一个给出整数作为第一个或第二个参数的对,你必须自己编写一些代码。
要查找给定的对,请继续阅读。
std::binary_search
不能返回迭代器,也不接受迭代器作为第4个参数。作为第四个参数,它接受比较器,但绝对是你的it
它不是比较器。
如果要获取迭代器,则应使用std::lower_bound
或std::upper_bound
并将的返回值分配给it
:it = std::lower_bound(t.begin(), t.end(), val)
。
答案 1 :(得分:0)
标准算法std :: binary_search具有以下形式
template<class ForwardIterator, class T>
bool binary_search(ForwardIterator first,
ForwardIterator last,
const T& value);
template<class ForwardIterator, class T, class Compare>
bool binary_search(ForwardIterator first,
ForwardIterator last,
const T& value,
Compare comp);
因此你在语句中调用算法
if (std::binary_search(t.begin(), t.end(), 5, *it))
以及后续检查
if (it != t.end())
没有意义。此外,如果向量的值类型为std::pair
,则必须指定类型为std::pair
的对象作为第三个参数。
您应使用std::binary_search
或std::lower_bound
代替std::equal_range
。