Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::min

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      min
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      template<class T>
      const T& min(const T& a,const T& b);
      (1)(constexpr since C++14)
      template<class T,class Compare>
      const T& min(const T& a,const T& b, Compare comp);
      (2)(constexpr since C++14)
      template<class T>
      T min(std::initializer_list<T> ilist);
      (3)(since C++11)
      (constexpr since C++14)
      template<class T,class Compare>
      T min(std::initializer_list<T> ilist, Compare comp);
      (4)(since C++11)
      (constexpr since C++14)

      Returns the smaller of the given values.

      1,2) Returns the smaller ofa andb.
      1) Usesoperator< to compare the values.
      IfT is notLessThanComparable, the behavior is undefined.
      2) Use the comparison functioncomp to compare the values.
      3,4) Returns the smallest of the values in initializer listilist.
      Ifilist.size() is zero, orT is notCopyConstructible, the behavior is undefined.
      3) Usesoperator< to compare the values.
      IfT is notLessThanComparable, the behavior is undefined.
      4) Use the comparison functioncomp to compare the values.

      Contents

      [edit]Parameters

      a, b - the values to compare
      ilist - initializer list with the values to compare
      cmp - comparison function object (i.e. an object that satisfies the requirements ofCompare) which returnstrue ifa isless thanb.

      The signature of the comparison function should be equivalent to the following:

      bool cmp(const Type1& a,const Type2& b);

      While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)Type1 andType2 regardless ofvalue category (thus,Type1& is not allowed, nor isType1 unless forType1 a move is equivalent to a copy(since C++11)).
      The typesType1 andType2 must be such that an object of typeT can be implicitly converted to both of them.

      [edit]Return value

      1,2) The smaller ofa andb. If the values are equivalent, returnsa.
      3,4) The smallest value inilist. If several values are equivalent to the smallest, returns the leftmost such value.

      [edit]Complexity

      1) Exactly one comparison usingoperator<.
      2) Exactly one application of the comparison functioncomp.
      3,4) Given\(\scriptsize N\)N asilist.size():
      3) Exactly\(\scriptsize N-1\)N-1 comparisons usingoperator<.
      4) Exactly\(\scriptsize N-1\)N-1 applications of the comparison functioncomp.

      [edit]Possible implementation

      min (1)
      template<class T>const T& min(const T& a,const T& b){return(b< a)? b: a;}
      min (2)
      template<class T,class Compare>const T& min(const T& a,const T& b, Compare comp){return(comp(b, a))? b: a;}
      min (3)
      template<class T>T min(std::initializer_list<T> ilist){return*std::min_element(ilist.begin(), ilist.end());}
      min (4)
      template<class T,class Compare>T min(std::initializer_list<T> ilist, Compare comp){return*std::min_element(ilist.begin(), ilist.end(), comp);}

      [edit]Notes

      Capturing the result ofstd::min by reference produces a dangling reference if one of the parameters is a temporary and that parameter is returned:

      int n=-1;constint& r= std::min(n+2, n*2);// r is dangling

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <string_view> int main(){std::cout<<"smaller of 10 and 010 is "<< std::min(10,010)<<'\n'<<"smaller of 'd' and 'b' is '"<< std::min('d','b')<<"'\n"<<"shortest of\"foo\",\"bar\", and\"hello\" is\""<< std::min({"foo","bar","hello"},[](conststd::string_view s1,conststd::string_view s2){return s1.size()< s2.size();})<<"\"\n";}

      Output:

      smaller of 10 and 010 is 8smaller of 'd' and 'b' is 'b'shortest of "foo", "bar", and "hello" is "foo"

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 281C++98T was required to beCopyConstructible for overloads(1,2)not required
      LWG 2239C++98
      C++11
      1.T was required to beLessThanComparable for
          overloads(2) (C++98) and(4) (C++11)
      2. the complexity requirements were missing
      1. not required
      2. added the requirements

      [edit]See also

      returns the greater of the given values
      (function template)[edit]
      (C++11)
      returns the smaller and larger of two elements
      (function template)[edit]
      returns the smallest element in a range
      (function template)[edit]
      (C++17)
      clamps a value between a pair of boundary values
      (function template)[edit]
      returns the smaller of the given values
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/min&oldid=178175"

      [8]ページ先頭

      ©2009-2025 Movatter.jp