STL 中的最小和最大操作
原文:https://www.studytonight.com/cpp/stl/stl-min-max-operations
以下是我们将要介绍的功能:
- 最大方法
- 最大元素法
- 最小方法
- 最小元素法
- 最小最大值法
- 最小最大元素法
- 李氏比较法
- next _ 置换方法
- 预排列法
max
和min
方法
max
方法的语法是:max(object_type a, object_type b, compare_function)
此方法返回 a 和 b 的较大元素。 compare_function 可以省略。如果 max()中没有使用 compare_function,则默认情况下,元素与运算符 >
进行比较。 compare_function 用于确定当对象 a 和对象 b 为非数字类型时,哪个对象更大。
min
方法的语法是:min(object_type a, object_type b, compare_function)
此方法返回 a 和 b 的较小元素。 compare_function 可以省略。如果 min()中没有使用 compare_function,则默认情况下,元素与运算符 <
进行比较。 compare_function 用于确定当对象 a 和对象 b 为非数字类型时,哪个对象更小。
下面是一个演示 max()和 min()方法用法的示例。
#include<iostream>
#include<algorithm>
using namespace std;
*/*compare function for strings*/*
bool **myMaxCompare**(string a, string b)
{
return (a.size() > b.size());
}
bool **myMinCompare**(string a, string b)
{
return (a.size() > b.size());
}
int main()
{
int x=4, y=5;
cout << **max**(x,y); *// prints 5*
cout << **min**(x,y); *// prints 4*
cout << **max**(2.312, 5.434); *// prints 5.434*
cout << **min**(2.312, 5.434); *// prints 2.312*
string s = "smaller srting";
string t = "longer string---";
string s1 = max(s, t, myMaxCompare);
cout<< s1 <<endl; *// prints longer string---*
string s1 = min(s, t, myMinCompare);
cout<< s1 <<endl; *// prints smaller string*
}
max_element
和min_element
方法
max_element 方法的语法是:
max_element(iterator first, iterator last, compare_function)
此方法返回范围[第一个,最后一个]中最大的元素。 compare_function 可以省略。如果 max_element()中没有使用 compare_function,则默认情况下,元素与运算符 >
进行比较。 compare_function 用于确定当对象 a 和对象 b 为非数字类型时,哪个对象更大。
min_element
方法的语法是:
min_element(iterator first, iterator last, compare_function)
此方法返回范围[第一个,最后一个]中较小的元素。 compare_function 可以省略。如果 min_element()中没有使用 compare_function,则默认情况下,元素与运算符 <
进行比较。 compare_function 用于确定当对象 a 和对象 b 为非数字类型时,哪个对象更小。
下面是一个演示 max_element()和 min_element()方法用法的示例。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool **myMaxCompare**(int a, int b)
{
return (a < b);
}
bool **myMinCompare**(int a, int b)
{
return (a < b);
}
int main()
{
int values[] = { 1,5,4,9,8,10,6,5,1};
vector<int> v(values,values+9);
cout<< ***max_element**(v.begin(), v.end());
*/* prints 10 */*
cout<< ***min_element**(v.begin(), v.end());
*/* prints 1 */*
*/* using mycompare function */*
cout<< ***max_element**(v.begin(), v.end(), myMaxCompare);
*/* prints 10 */*
cout<< ***min_element**(v.begin(), v.end(), myMinCompare);
*/* prints 1 */*
}
lexicographical_compare
方法
此方法的语法是:
**lexicographical_compare**(iterator first1, iterator last1, iterator first2, iterator last2)
它比较范围[第一个 1,最后一个 1]和[第一个 2,最后一个 2],如果第一个范围在字典上小于后一个范围,则返回 true 。
当我们想要定义如何比较元素时,可以定义和使用自定义比较函数。下面是这个方法的变体的语法。
**lexicographical_compare**(iterator first1, iterator last1, iterator first2, iterator last2, bool compare_function)
下面是演示其用法的程序:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool **myoperator**(char a , char b)
{
return a > b;
}
int main()
{
char s[] = "nkvaio";
char x[] = "xyzabc";
cout >> **lexicographical_compare**(s, s+6, x, x+6, myoperator);
*/* prints 0 , Boolean false , since a[4] is not less than b[4] */*
}