Я столкнулся со следующей проблемой. У меня есть std::vector< std::pair<int, Move> > x
типа std::pair<int, Move>
, где Move
- произвольный объект, для которого не определен оператор сравнения, например, < > !+ == <= >=
и т. Д.
Основная причина, по которой я связал объекты Move
с целочисленными значениями, заключается в том, что у объектов Move
должен быть номер, описывающий их приоритет для какой-либо цели. Основное намерение состоит в сортировке вектора, таким образом сортируя Move
объектов, используя их соответствующие целочисленные значения.
Реальная проблема начинается, когда я хочу отсортировать эти пары в векторе, используя функцию std::sort
. Сначала я думал, что для сравнения важен только первый элемент std::pair
, однако оказалось, что для успешной компиляции программы обоим объектам необходимы определенные для них операции сравнения.
Поскольку я не хотел изменять исходный класс Move
, я написал класс Wrapper
, который должен был обернуть std::pair<int, Move>
, и в нем была определена операция сравнения, чтобы можно было отсортировать std::vector< Wrapper < std::pair<int, Move> > > x;
без необходимости изменить Move
класс. Логика здесь в том, что vector
предоставляется класс, для которого определена операция <
.
Я использовал следующий класс оболочки:
template <typename T>
struct Wrapper{
Wrapper(const T & pair): pair_mem(pair)
bool operator(const T & other_pair) const{
return this->pair_mem.first < other_pair.first;
}
T pair_mem;
};
Ну, как вы уже догадались, вышеприведенный подход не сработал, и мне пришлось пройти через кучу ошибок компилятора. Наконец, я попытался добавить < operator
в класс Move и даже после этого мне не удалось скомпилировать программу.
Ниже приведена ошибка, которую я считаю наиболее важной.
: note: this candidate was rejected because mismatch in count of arguments
struct Wraper{
^
: note: this candidate was rejected because mismatch in count of arguments
Wraper(const std::pair<int, Move> & move){
Я использую mpiCC
в качестве компилятора
UPDATE
Я изменил T
на Wrapper
, как один из предложенных ответов, но проблема не решена. Вот скриншот от компилятора,