W C++ max_element
, jeśli istnieje wiele elementów, które są maksymalne, zwraca pierwszy taki element. Natomiast minmax_element
(C++ 11 lub późniejsze) zwraca ostatni element max.Różnica w zachowaniu max_element i minmax_element w C++ STL
Czy istnieją jakieś powody ze standardów tego zachowania?
Od cplusplus.com
Jeśli więcej niż jeden równoważnik element ma największą wartość, drugie punkty iteracyjnej do ostatniego z tych elementów.
Porównania są wykonywane przy użyciu operatora < dla pierwszej wersji lub kompu dla drugiego; Element jest największy, jeśli żaden inny element nie porównuje mniej niż on. Jeśli więcej niż jeden element spełnia ten warunek, iterator zwrócił punkty pierwszemu z takich elementów. Dokumentacja
[Według CPPReference jest to oczekiwane zachowanie.] (Http://en.cppreference.com/w/cpp/algorithm/minmax_element) Dlaczego tak się spodziewano, musiałbym popływać w Standardie . – user4581301
** [alg.min.max] ** (uwaga 30 w rev n4594) dekrety to jest prawem. Nie ma na liście racjonalnej. – user4581301
Co jest jeszcze ciekawsze, to że 'minmax_element' stosuje przeciwną politykę dla minimalnego elementu (zwracany jest pierwszy). –