Pairs
The idea of a pair of values often comes handy in programming. C++ allows us to make these pairs.
We'll cover the following
With std::pair
, you can build pairs of arbitrary types. The class template std::pair
needs the header <utility>
. std::pair
has a default, copy and move constructor. Pair objects can be swapped: std::swap(pair1, pair2)
.
Pairs will often be used in the C++ library. For example, the function std::minmax returns its result as a pair, the associative container std::map
, std::unordered_map
, std::multimap
and std::unordered_multimap
manage their key/value association in pairs.
To get the elements of a pair p
, you can either access it directly or via an index. So, with p.first
or std::get<0>(p)
you get the first, with p.second
or std::get<1>(p)
you get the second element of the pair.
Pairs support the comparison operators ==
, !=
, <
, >
, <=
and >=
. If you compare two pairs for identity, at first the members pair1.first
and pair2.first
will be compared and then pair1.second
and pair2.second
. The same strategy holds for the other comparison operators.
std::make_pair
C++ has the practical help function std::make_pair
to generate pairs, without specifying their types. std::make_pair
automatically deduces their types.
// pair.cpp#include <iostream>#include <utility>using namespace std;int main(){pair<const char*, double> charDoub("str", 3.14);pair<const char*, double> charDoub2 = make_pair("str", 3.14);auto charDoub3 = make_pair("str", 3.14);cout << charDoub.first << ", " << charDoub.second << "\n"; // str, 3.14charDoub.first = "Str";get<1>(charDoub) = 4.14;cout << charDoub.first << ", " << charDoub.second << "\n"; // Str, 4.14return 0;}
In the next lesson, we will talk about tuples in C++.