namespace std { template struct pair { // Имена типов компонентов typedef T1 firstType; typedef T2 secondType; // Компоненты T1 first; T2 second; /* Конструктор по умолчанию - вызовы T1() и T2() * обеспечивают инициализацию базовых типов */ pair() : first(T1()), second(T2()) { } // Конструктор с двумя значениями pair(const T1& a, const T2& b) : first(a), second(b) { } // Копирующий конструктор с автоматическими преобразованиями template pair(const pair &p) : first(p.first), second(p.second) { } }; // Сравнения template bool operator== (const pair&, const pair&); template bool operator< (const pair&, const pair&); ... // И т.д для !=, <=, >, >= template pair make_pair(const T1&, const T2&); }