# C++ Notes: STL Containers - `pair` utility class

The `pair` template class is defined in <utility> to keep pairs of values. Aside from some functions that return two values in a pair, the elements of a map are stored as key-value pairs. The following illustrates the declaration and use of pair, with it's two public fields, `first` and `second`.

### Example

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
    // map/pair-test.cpp - Show basic use of pair.
    // 2004-02-29 - Fred Swartz - Rodenbach

    #include <utility>
    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;

    int main() {
        //-- Declare a pair variable.
        pair<string, int> pr1;

        //-- Declare and initialize with constructor.
        pair<string, int> pr2("heaven", 7);
        cout << pr2.first << "=" << pr2.second << endl;
        // Prints heaven=7

        //-- Declare and initialize pair pointer.
        pair<string, int>* prp = new pair<string, int>("yards", 9);
        cout << prp->first << "=" << prp->second << endl;
        // Prints yards=9

        //-- Declare map and assign value to keys.
        map<string, string> engGerDict;
        engGerDict["shoe"] = "Schuh";
        engGerDict["head"] = "Kopf";

        //-- Iterate over map.  Iterator value is a key-value pair.
        //   Iteration in map is in sorted order.
        map<string, string>::const_iterator it;
        for (it=engGerDict.begin(); it != engGerDict.end(); ++it) {
            cout << it->first << "=" << it->second << endl;
        }
        // Prints head=kopf
        //        shoe=Schuh

        system("PAUSE");
        return 0;
    }