2 #ifndef EXTENDED_PAIR_H
 
     3 #define EXTENDED_PAIR_H
 
     5 template <typename T1, typename A1, typename T2, typename A2>
 
     8   typedef T2 second_type;
 
    10   extended_pair() : first(), second() {}
 
    12   extended_pair(A1 f, A2 s) : first(f), second(s) {}
 
    15   extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {}
 
    21 template <typename T1, typename T2, 
 
    22 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    23 bool operator==(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    24 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    25   return left.first == right.first && left.second == right.second;
 
    28 template <typename T1, typename T2, 
 
    29 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    30 bool operator!=(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    31 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    32   return  !(left == right);
 
    35 template <typename T1, typename T2, 
 
    36 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    37 bool operator<(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    38 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    39   if (left.first == right.first) return left.second == right.second;
 
    40   return left.first < right.first;
 
    43 template <typename T1, typename T2, 
 
    44 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    45 bool operator>(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    46 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    50 template <typename T1, typename T2, 
 
    51 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    52 bool operator<=(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    53 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    54   return !(right > left);
 
    57 template <typename T1, typename T2, 
 
    58 	  typename LA1, typename LA2, typename RA1, typename RA2>
 
    59 bool operator>=(const extended_pair<T1, LA1, T2, LA2>& left, 
 
    60 		const extended_pair<T1, RA1, T2, RA2>& right) {
 
    61   return !(right < left);