Die Boost C++ Bibliotheken

Kapitel 59. Boost.MinMax

Wenn Sie den kleinsten und größten Wert suchen und bisher std::min() und std::max() verwendet haben, bietet Ihnen Boost.MinMax einen Algorithmus an, der den kleinsten und größten Wert mit einem einzigen Funktionsaufruf findet. Der von Boost.MinMax angebotene Algorithmus ist effizienter als wenn Sie std::min() und std::max() aufrufen.

Boost.MinMax ist in C++11 eingegangen. Sie finden die Algorithmen aus dieser Boost-Bibliothek in der Headerdatei algorithm, wenn Ihre Entwicklungsumgebung C++11 unterstützt.

Beispiel 59.1. boost::minmax() in Aktion
#include <boost/algorithm/minmax.hpp>
#include <boost/tuple/tuple.hpp>
#include <iostream>

int main()
{
  int i = 2;
  int j = 1;

  boost::tuples::tuple<const int&, const int&> t = boost::minmax(i, j);

  std::cout << t.get<0>() << '\n';
  std::cout << t.get<1>() << '\n';
}

Sie verwenden boost::minmax(), wenn Sie den kleinsten und den größten zweier Werte finden möchten. Während std::min() und std::max() nur einen Wert zurückgeben, gibt boost::minmax() entsprechend zwei Werte zurück. Dies geschieht über ein Tuple vom Typ boost::tuple. Die erste im Tuple gespeicherte Referenz verweist auf den kleineren, die zweite Referenz auf den größeren Wert. Beispiel 59.1 gibt entsprechend 1 und 2 in dieser Reihenfolge aus.

boost::minmax() ist in der Headerdatei boost/algorithm/minmax.hpp definiert.

Beispiel 59.2. boost::minmax_element() in Aktion
#include <boost/algorithm/minmax_element.hpp>
#include <array>
#include <utility>
#include <iostream>

int main()
{
  typedef std::array<int, 4> array;
  array a{{2, 3, 0, 1}};

  std::pair<array::iterator, array::iterator> p =
    boost::minmax_element(a.begin(), a.end());

  std::cout << *p.first << '\n';
  std::cout << *p.second << '\n';
}

So wie die Standardbibliothek Algorithmen zur Verfügung stellt, um das kleinste und größte Element in einem Container zu finden, bietet Boost.MinMax boost::minmax_element() an, um das kleinste und größte Element in einem Container mit einem einzigen Funktionsaufruf zu finden.

Beachten Sie, dass boost::minmax_element() als Ergebnis ein std::pair mit zwei Iteratoren zurückgibt. Der Rückgabewert unterscheidet sich demnach von boost::minmax(). Der erste Iterator zeigt auf das kleinste und der zweite Iterator auf das größte Element im Container. Beispiel 59.2 gibt demnach 0 und 3 in dieser Reihenfolge aus.

boost::minmax_element() ist in der Headerdatei boost/algorithm/minmax_element.hpp definiert.

Die Algorithmen boost::minmax() und boost::minmax_element() können auch mit einem dritten Parameter aufgerufen werden, der angibt, wie Werte verglichen werden sollen. boost::minmax() und boost::minmax_element() können demnach genauso verwendet werden wie die Algorithmen aus der Standardbibliothek.