У меня есть следующие настройки:
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
Я понятия не имею, почему он не компилируется, все примеры, которые я мог найти с функцией сравнения, переданной по алгоритму, примененному к вектору указателя, выглядели почти одинаково.
std::max(controllers2d.begin(), controllers2d.end(), comp);
сравнил бы итератор (и comp
сравнил бы элемент (указатель в вашем случае) с ошибкой компиляции).
std::max_element(controllers2d.begin(), controllers2d.end(), comp);
сравнил бы указатель (как comp
).
std::max
возвращает максимум между двумя значениями, это не контейнерный алгоритм.
использование std::max_element
найти максимум диапазона.
*std::max_element(controllers2d.begin(),controllers2d.nd(),comp)