Кастомный 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?