Binary_Search(搜索)pars向量

Binary_Search on vector of pars

本文关键字:pars 向量 搜索 Search Binary      更新时间:2023-10-16

我试图在一对向量上执行二进制排序,并且一旦找到迭代器也返回,但是我似乎对此有问题。一开始是这样的t是int类型的向量

if (std::binary_search(t.begin(), t.end(), 5, *it))
{
    if (it != t.end())
    {
        cout << "FOund";
    }
}

然而,这似乎不起作用(编译问题)我认为这个问题是因为我有一对而不是法向量,所以想知道是否有人有任何网站链接在这个我可以阅读?# #

收到错误如下:

term不能求值为带有两个参数的函数

标准算法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::lower_boundstd::equal_range来代替std::binary_search

你到底想干什么?如何在对数组中查找一个整数?你只能在一对向量中找到一个给定的

如果你想找到一个以整数作为第一个或第二个参数的对,你必须自己写一些代码。

要查找给定的,请继续阅读

std::binary_search不能返回迭代器,也不接受迭代器作为第四个形参。作为第四个参数,它接受一个比较器,但你的it肯定不是比较器。

如果你想获得一个迭代器,你应该使用std::lower_boundstd::upper_bound,并且返回值赋给it: it = std::lower_bound(t.begin(), t.end(), val)