i1 = std::max_element(myvector.begin(), myvector.end(), comp1_);
неправильно
i1 = std::max_element(myvector.begin(), myvector.end(), comp2);
будет работать.
Используя comp1_
с max_element
, вы фактически запрашиваете минимальный элемент, потому что max_element находит элемент x, для которого comp1_ (x, y) неверно для любого y.
Вы фактически сделали двойной отрицательный результат, вы переключились на запрос максимального элемента, но также изменили функцию сравнения, которую вы переключили на запрос минимума снова.
Что вы должны сделать при использовании min_element
и max_element
- передать функцию сравнения, которая означает «меньше чем», тогда эти функции будут делать то, что говорят.
Теперь вы можете понять, что
i2 = std::min_element(myvector.begin(), myvector.end(), comp1_);
даст вам максимальный элемент.