代码之家  ›  专栏  ›  技术社区  ›  Bob

下限λ比较错误[重复]

  •  0
  • Bob  · 技术社区  · 8 年前

    我试图使用排序算法对向量的元素进行排序。 这是我的代码片段。

    比较器

    struct comparator
     {
        bool operator() ( OptVector<pair<int, pair<CgpPop*,CgpPop*> > >::iterator it1, OptVector<pair<int, pair<CgpPop*,CgpPop*> > >::iterator it2)
        {
                return ( ((*it1).first) < ((*it2).first));
        }
    } o_comparator;
    

    我的向量 这里OptVector是一个向量的包装器,它的行为与标准C++向量相同。

    OptVector< pair<int, pair<CgpPop*,CgpPop*> > > pll_units;
    

    调用排序算法

    sort<OptVector< pair<int, pair<CgpPop*,CgpPop*> > >::iterator > (pll_units.begin(), pll_units.end(), o_comparator);
    

    但编译器抛出以下错误

    /calm/svr/sql/generic/stlinclude/stl/_algo.c: In function ‘const _Tp& _STL::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >, _Compare = comparator]’:
    /calm/svr/sql/generic/stlinclude/stl/_algo.c:820:   instantiated from ‘void _STL::__introsort_loop(_RandomAccessIter, _RandomAccessIter, _Tp*, _Size, _Compare) [with _RandomAccessIter = _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*, _Tp = _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >, _Size = long int, _Compare = comparator]’
    /calm/svr/sql/generic/stlinclude/stl/_algo.c:841:   instantiated from ‘void _STL::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*, _Compare = comparator]’
    /calm/svr/sql/generic/source/codegen/cgpop.cpp:1249:   instantiated from here
    /calm/svr/sql/generic/stlinclude/stl/_algo.c:78: error: no match for call to ‘(comparator) (const _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >&, const _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >&)’
     /calm/svr/sql/generic/source/codegen/cgpop.cpp:1192: note: candidates are: bool comparator::operator()(_STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*, _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*)
    /calm/svr/sql/generic/stlinclude/stl/_algo.c:79: error: no match for call to ‘(comparator) (const _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >&, const _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >&)’
    /calm/svr/sql/generic/source/codegen/cgpop.cpp:1192: note: candidates are: bool comparator::operator()(_STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*, _STL::pair<int, _STL::pair<CgpPop*, CgpPop*> >*)
    

    谁能告诉我我错在哪里吗?

    0 回复  |  直到 8 年前
        1
  •  5
  •   songyuanyao    9 年前

    comparator函子应该将元素而不是迭代器作为比较的参数。

    您应该更改 comparator::operator() 从迭代器到值类型:

    struct comparator
    {
        bool operator() ( const pair<int, pair<CgpPop*,CgpPop*> > & lhs, const pair<int, pair<CgpPop*,CgpPop*> > & rhs) const
        {
            return lhs.first < rhs.first;
        }
    };
    

    顺便说一句:制作 operator()