std::minmax
ΠΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ C++23.
#include <algorithm>
ΠΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π½Π° 2024-03-18.
Define overload #1
template<class T> constexpr pair<const T&, const T&> minmax(const T& a, const T& b);
ΠΡΡΠΈΡΠ»ΡΠ΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ a ΠΈ b.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ a ΠΈ b ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° "<".
ΠΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΡΡΡΠ»ΠΎΠΊ; first ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅, Π° second Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Example, possible implementation
Define overload #2
template<class T, class Compare> constexpr pair<const T&, const T&> minmax(const T& a, const T& b, Compare comp);
ΠΡΡΠΈΡΠ»ΡΠ΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ a ΠΈ b.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ a ΠΈ b ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° "comp".
ΠΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΡΡΡΠ»ΠΎΠΊ; first ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅, Π° second Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Example, possible implementation
Define overload #3
template<class T> constexpr pair<T, T> minmax(initializer_list<T> t);
ΠΡΠ΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ΅ t.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° "<".
ΠΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Example, possible implementation
Define overload #4
template<class T, class Compare> constexpr pair<T, T> minmax(initializer_list<T> t, Compare comp);
ΠΡΠ΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ΅ t.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° "comp".
ΠΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Example, possible implementation
Examples
Example 1:
#include <iostream>
#include <algorithm>
int main()
{
auto data = {2, 2, 3, 4, 5, 6, 7, 7, 4, 4};
auto res = std::minmax(data);
std::cout << res.first << '\n' << res.second << std::endl;
return 0;
}
2 7
Changelog
See also
TODO
This page was last modified on 2024-03-18