Member 11807654 Ответов: 1

Почему возникает такая ошибка : binary ' -' : 'std:: _list_iterator< _mylist>' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора?


Здравствуйте, я написал следующий код для сортировки карты в c++ по второму значению кортежей (вместо первого значения). но это дает мне ошибку : "binary' -' : 'std:: _List_iterator< _Mylist>' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора", и позиция ошибки находится в заголовке "algorithm.h". почему это происходит?

<pre>template<class T>
struct less_second
: std::binary_function<T,T,bool>
{
   inline bool operator()(const T& lhs, const T& rhs)
   {
      return lhs.second < rhs.second;
   }
};

typedef std::pair<int,int> data_t;
		std::list<data_t> vec(groups.begin(), groups.end());
		std::sort(vec.begin(), vec.end(), less_second<data_t>());


Что я уже пробовал:

Я использовал код из:STL std:: map and sorting using value_compare-общее Программирование - GameDev.net[^]

Richard MacCutchan

Где находится код, на который ссылается сообщение об ошибке?

Member 11807654

он находится в заголовке алгоритма (я использовал #include & lt;algorithm>) и показывает строку "_Sort(_Unchecked(_First), _Unchecked(_Last), _Last - _First, _Pred);" как позицию, в которой возникает ошибка. Я использую visual studio 2012

Richard MacCutchan

Код алгоритма пытается вычесть один элемент из другого, но типы, объявленные в вашем шаблоне, не могут использовать простое вычитание. Поэтому вам нужно определить перегрузку для этой операции.

1 Ответов

Рейтинг:
0

Philippe Mori

Чтобы отсортировать список, вам, вероятно, следует воспользоваться функцией-членом sort. Смотрите этот пример : список:: sort-C++ Reference[^].

Как правило, вы не будете использовать std::list если вам нужна сортировка.

А если вы используете карту, то ключ - это поле, которое нужно отсортировать. Вы должны пересмотреть, какие контейнеры вы используете, а также выбрать соответствующие алгоритмы.


Richard MacCutchan

ОП скопировал какой-то код из интернета; он может быть действительным, а может и нет.