64 template<
class E1,
class E2>
class Tuple2 {
77 const E1 &
x1()
const {
return m_x1; }
79 const E2 &
x2()
const {
return m_x2; }
92 template<
class E1,
class E2>
95 return t1.
x1() == t2.
x1() && t1.
x2() == t2.
x2();
99 template<
class E1,
class E2>
102 return t1.
x1() != t2.
x1() || t1.
x2() != t2.
x2();
106 template<
class E1,
class E2>
107 ostream &operator<<(ostream &os, const Tuple2<E1,E2> &t2)
109 os <<
"(" << t2.x1() <<
" " << t2.x2() <<
")";
120 template<
class E1,
class E2,
class E3>
class Tuple3 {
129 Tuple3(
const E1 &y1,
const E2 &y2,
const E3 &y3) :
155 template<
class E1,
class E2,
class E3>
158 return t1.
x1() == t2.
x1() && t1.
x2() == t2.
x2() && t1.
x3() == t2.
x3();
162 template<
class E1,
class E2,
class E3>
165 return t1.
x1() != t2.
x1() || t1.
x2() != t2.
x2() || t1.
x3() != t2.
x3();
169 template<
class E1,
class E2,
class E3>
170 ostream &operator<<(ostream &os, const Tuple3<E1,E2,E3> &t3)
172 os <<
"(" << t3.x1() <<
" " << t3.x2() <<
" " << t3.x3() <<
")";
184 template<
class E1,
class E2,
class E3,
class E4>
class Tuple4 {
194 Tuple4(
const E1 &y1,
const E2 &y2,
const E3 &y3,
const E4 &y4) :
224 template<
class E1,
class E2,
class E3,
class E4>
227 return t1.
x1() == t2.
x1() && t1.
x2() == t2.
x2() &&
228 t1.
x3() == t2.
x3() && t1.
x4() == t2.
x4();
232 template<
class E1,
class E2,
class E3,
class E4>
235 return t1.
x1() != t2.
x1() || t1.
x2() != t2.
x2() ||
236 t1.
x3() != t2.
x3() || t1.
x4() != t2.
x4();
240 template<
class E1,
class E2,
class E3,
class E4>
241 ostream &operator<<(ostream &os, const Tuple4<E1,E2,E3,E4> &t4)
243 os <<
"(" << t4.x1() <<
" " << t4.x2() <<
" " <<
244 t4.x3() <<
" " << t4.x4() <<
")";
248 template<
typename K1_,
typename K2_,
249 typename Hash1_ = DefHashFunc<K1_>,
250 typename Hash2_ = DefHashFunc<K2_> >