2012-03-27 23:13:14 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2014-09-21 17:33:12 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" / > < title > Pairs< / title > < meta name = "generator" content = "DocBook XSL-NS Stylesheets V1.78.1" / > < meta name = "keywords" content = "ISO C++, library" / > < meta name = "keywords" content = "ISO C++, runtime, library" / > < link rel = "home" href = "../index.html" title = "The GNU C++ Library" / > < link rel = "up" href = "utilities.html" title = "Chapter 6. Utilities" / > < link rel = "prev" href = "utilities.html" title = "Chapter 6. Utilities" / > < link rel = "next" href = "memory.html" title = "Memory" / > < / head > < body > < div class = "navheader" > < table width = "100%" summary = "Navigation header" > < tr > < th colspan = "3" align = "center" > Pairs< / th > < / tr > < tr > < td width = "20%" align = "left" > < a accesskey = "p" href = "utilities.html" > Prev< / a > < / td > < th width = "60%" align = "center" > Chapter 6.
2012-03-27 23:13:14 +00:00
Utilities
2014-09-21 17:33:12 +00:00
< / th > < td width = "20%" align = "right" > < a accesskey = "n" href = "memory.html" > Next< / a > < / td > < / tr > < / table > < hr / > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h2 class = "title" style = "clear: both" > < a id = "std.util.pairs" > < / a > Pairs< / h2 > < / div > < / div > < / div > < p > The < code class = "code" > pair< T1,T2> < / code > is a simple and handy way to
2012-03-27 23:13:14 +00:00
carry around a pair of objects. One is of type T1, and another of
type T2; they may be the same type, but you don't get anything
extra if they are. The two members can be accessed directly, as
< code class = "code" > .first< / code > and < code class = "code" > .second< / code > .
< / p > < p > Construction is simple. The default ctor initializes each member
with its respective default ctor. The other simple ctor,
< / p > < pre class = "programlisting" >
pair (const T1& x, const T2& y);
< / pre > < p > does what you think it does, < code class = "code" > first< / code > getting < code class = "code" > x< / code >
and < code class = "code" > second< / code > getting < code class = "code" > y< / code > .
< / p > < p > There is a constructor template for copying pairs of other types:
< / p > < pre class = "programlisting" >
template < class U, class V> pair (const pair< U,V> & p);
< / pre > < p > The compiler will convert as necessary from U to T1 and from
V to T2 in order to perform the respective initializations.
< / p > < p > The comparison operators are done for you. Equality
of two < code class = "code" > pair< T1,T2> < / code > s is defined as both < code class = "code" > first< / code >
members comparing equal and both < code class = "code" > second< / code > members comparing
equal; this simply delegates responsibility to the respective
< code class = "code" > operator==< / code > functions (for types like MyClass) or builtin
comparisons (for types like int, char, etc).
< / p > < p >
The less-than operator is a bit odd the first time you see it. It
is defined as evaluating to:
< / p > < pre class = "programlisting" >
x.first < y.first ||
( !(y.first < x.first) & & x.second < y.second )
< / pre > < p > The other operators are not defined using the < code class = "code" > rel_ops< / code >
functions above, but their semantics are the same.
< / p > < p > Finally, there is a template function called < code class = "function" > make_pair< / code >
that takes two references-to-const objects and returns an
instance of a pair instantiated on their respective types:
< / p > < pre class = "programlisting" >
pair< int,MyClass> p = make_pair(4,myobject);
2014-09-21 17:33:12 +00:00
< / pre > < / div > < div class = "navfooter" > < hr / > < table width = "100%" summary = "Navigation footer" > < tr > < td width = "40%" align = "left" > < a accesskey = "p" href = "utilities.html" > Prev< / a > < / td > < td width = "20%" align = "center" > < a accesskey = "u" href = "utilities.html" > Up< / a > < / td > < td width = "40%" align = "right" > < a accesskey = "n" href = "memory.html" > Next< / a > < / td > < / tr > < tr > < td width = "40%" align = "left" valign = "top" > Chapter 6.
2012-03-27 23:13:14 +00:00
Utilities
2014-09-21 17:33:12 +00:00
< / td > < td width = "20%" align = "center" > < a accesskey = "h" href = "../index.html" > Home< / a > < / td > < td width = "40%" align = "right" valign = "top" > Memory< / td > < / tr > < / table > < / div > < / body > < / html >