}
};
+template<typename A, typename B>
+inline unsigned int pairHashFunction(Pair<A, B> p) {
+ return (p.getFirst() << 1) ^ p.getSecond();
+}
+
+template<typename A, typename B>
+inline bool pairEquals(Pair<A, B> a, Pair<A, B> b) {
+ return ( a.getFirst() == b.getFirst() ) && (a.getSecond() == b.getSecond());
+}
+
+inline unsigned int pairHashFunction(Pair<int64_t, int64_t> p) {
+ return (p.getFirst() << 1) ^ p.getSecond();
+}
+
+inline bool pairEquals(Pair<int64_t, int64_t> a, Pair<int64_t, int64_t> b) {
+ return ( a.getFirst() == b.getFirst() ) && (a.getSecond() == b.getSecond());
+}
#endif