C++ C++;:二进制搜索编译错误

C++ C++;:二进制搜索编译错误,c++,binary-search,C++,Binary Search,我有以下几行代码: if(std::binary_search(face_verts.begin(), face_verts.end(), left_right_vert[0]) && std::binary_search(face_verts.begin(), face_verts.end(), left_right_vert[1])) 当我编译代码时,会出现以下错误: In file included from /usr/include/c++/4.4/a

我有以下几行代码:

if(std::binary_search(face_verts.begin(), face_verts.end(), left_right_vert[0]) &&
         std::binary_search(face_verts.begin(), face_verts.end(), left_right_vert[1]))
当我编译代码时,会出现以下错误:

In file included from /usr/include/c++/4.4/algorithm:62,
                 from R3Mesh.cpp:10:
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘bool std::binary_search(_FIter, _FIter, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<R3Point*, std::vector<R3Point, std::allocator<R3Point> > >, _Tp = R3Point]’:
R3Mesh.cpp:1335:   instantiated from here
/usr/include/c++/4.4/bits/stl_algo.h:2762: error: no match for ‘operator<’ in ‘__val < __i.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = R3Point*, _Container = std::vector<R3Point, std::allocator<R3Point> >]()’
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘_FIter std::lower_bound(_FIter, _FIter, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<R3Point*, std::vector<R3Point, std::allocator<R3Point> > >, _Tp = R3Point]’:
/usr/include/c++/4.4/bits/stl_algo.h:2761:   instantiated from ‘bool std::binary_search(_FIter, _FIter, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<R3Point*, std::vector<R3Point, std::allocator<R3Point> > >, _Tp = R3Point]’
R3Mesh.cpp:1335:   instantiated from here
/usr/include/c++/4.4/bits/stl_algo.h:2442: error: no match for ‘operator<’ in ‘__middle.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = R3Point*, _Container = std::vector<R3Point, std::allocator<R3Point> >]() < __val’
make: *** [R3Mesh.o] Error 1
在/usr/include/c++/4.4/algorithm:62中包含的文件中,
从R3Mesh.cpp:10:
/usr/include/c++/4.4/bits/stl_algo.h:在函数'bool std::binary_search(_FIter,_FIter,const_Tp&)[带_FIter=_gnu_cxx::_normal_迭代器,_Tp=R3Point]:
R3Mesh.cpp:1335:从此处实例化

/usr/include/c++/4.4/bits/stl_algo.h:2762:错误:“运算符”不匹配要使用二进制搜索,您的项目必须具有可比性
R3Point
没有内置的比较,这是核心原因


此外,要使用
binary\u search
您的列表必须已经按照比较操作排序。

您需要实现
操作符
std::binary\u search
使用谓词函数来比较条目。这就是
运算符为了使用
二进制搜索
您输入的序列必须根据特定的比较谓词进行排序。稍后,必须(显式或隐式)将这个非常相同的比较谓词指定给
二进制搜索
,以便在搜索过程中使用

因此,在这种情况下,您应该回答以下问题

  • 输入序列是否已排序?如果不是,你可以停在这里<代码>二进制搜索
  • 不能用于无序序列
  • 如果已排序,则使用哪个比较谓词对其进行排序?它是如何传递给排序函数的
  • 一旦知道比较谓词和传递方法,就可以使用
    binary\u search
    执行相同的操作


    注意,如果R3点由您实现,则不一定通过
    操作符实现比较,然后你可以添加
    操作符R3Point类的接口是什么样子的?你用什么来排序
    面顶点序列?我实际上没有排序向量-我不知道我正在运行二进制搜索的容器需要排序。有没有一种方法可以通过使用其他函数来确定向量中是否存在元素?否则,我认为实现我自己的“搜索”功能可能更有效。
    
    vector <R3Point > face_verts;
    vector <R3Point > left_right_vert;