Binary_在pars传染媒介的搜索

时间:2015-05-20 12:30:22

标签: c++ vector

我试图在对向量上执行二进制排序,并且一旦找到就返回迭代器,但是我似乎遇到了这个问题。最初我有这样的东西,t是int类型的向量。

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

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

收到的错误如下:

  

术语不评估为采用2个参数的函数

2 个答案:

答案 0 :(得分:0)

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

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

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

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

如果要获取迭代器,则应使用std::lower_boundstd::upper_bound的返回值分配给itit = 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_searchstd::lower_bound代替std::equal_range