Кастомный comparator для list

Есть такой код:

struct A
{
    A(int a_id, int a_value1, int a_value2): id(a_id), value1(a_value1), value2(a_value2){} 
    int id;
    int value1;
    int value2;
};

struct lessAbyValue1 : public std::binary_function<A, A, bool>
{
    bool operator()(const A& left, const A& right) const
      { return left.value1 < right.value1; }
};

typedef std::list<A> ContainerA;
//typedef std::vector<A> ContainerA;

int main(int , char* [])
{
    ContainerA cA;
    cA.push_back(A(1,1,2));
    cA.push_back(A(1,4,2));
    cA.push_back(A(1,5,2));
    cA.push_back(A(1,2,2));

    std::make_heap(lA.begin(), lA.end(), lessAbyValue1());
    return 0;
}

Почему этот код вызовет ошибку компиляции:


/usr/include/c++/9/bits/stl_heap.h:334:18: error: no match for ‘operator-’ (operand types are ‘std::_List_iterator<A>’ and ‘std::_List_iterator<A>’)
  334 |       if (__last - __first < 2)

А если поменять используемый контейнер

//typedef std::list<A> ContainerA;
typedef std::vector<A> ContainerA;

То все пройдет без ошибок? Как мне поменять код если я хочу все-таки использовать std::list а не std::vector?


Ответы (0 шт):