STL 中的最小和最大操作

原文:https://www.studytonight.com/cpp/stl/stl-min-max-operations

以下是我们将要介绍的功能:

  • 最大方法
  • 最大元素法
  • 最小方法
  • 最小元素法
  • 最小最大值法
  • 最小最大元素法
  • 李氏比较法
  • next _ 置换方法
  • 预排列法

maxmin方法

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_elementmin_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]  */*
}