Невозможно скомпилировать функцию сравнения для вектора указателей.

У меня есть следующие настройки:

std::vector<Data2DController*> controllers2d; // this is defined in the header

bool comp(const Data2DController* c1, const Data2DController* c2) {
return true;
};

inline std::vector<Visualizer*> MainController::gatherVisualizers() const {
std::vector<Visualizer*> visualizers;

// selected only the biggest cooridante system
Data2DController* biggestRadiusController = *std::max(controllers2d.begin(), controllers2d.end(), comp);

visualizers.push_back(biggestRadiusController->getCoordinatesVisualizer());

return visualizers;
}

В настоящее время мои функции действительно выглядят так, все остальное закомментировано ради простоты.

К сожалению, я получаю следующую ошибку (есть 4 одинаковых для двух входных аргументов):

Error   5   error C2664: 'bool (Controllers::Data2DController *,Controllers::Data2DController *)' : cannot convert argument 1 from 'const std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Controllers::Data2DController *>>>' to 'Controllers::Data2DController *'  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 521 1

Я понятия не имею, почему он не компилируется, все примеры, которые я мог найти с функцией сравнения, переданной по алгоритму, примененному к вектору указателя, выглядели почти одинаково.

0

Решение

std::max(controllers2d.begin(), controllers2d.end(), comp); сравнил бы итератор (и comp сравнил бы элемент (указатель в вашем случае) с ошибкой компиляции).

std::max_element(controllers2d.begin(), controllers2d.end(), comp); сравнил бы указатель (как comp).

2

Другие решения

std::max возвращает максимум между двумя значениями, это не контейнерный алгоритм.

использование std::max_element найти максимум диапазона.

*std::max_element(controllers2d.begin(),controllers2d.nd(),comp)

http://en.cppreference.com/w/cpp/algorithm/max_element

1