-
Notifications
You must be signed in to change notification settings - Fork 0
/
utility.h
100 lines (93 loc) · 1.97 KB
/
utility.h
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#pragma once
#ifndef _UTILITY_H
#define _UTILITY_H
namespace ministl
{
template<typename T1,typename T2>
class pair
{
friend pair<T1, T2> make_pair(T1 x, T2 y);
public:
T1 first;
T2 second;
pair() = default;
pair(const T1& x, const T2& y) :first(x), second(y) {}
template<typename U,typename V>
pair(const pair<U, V> &p) : first(p.first), second(p.second) {}
bool operator <(const pair<T1, T2>& rhs)
{
if (first == rhs.first)
return second < rhs.second;
return first < rhs.first;
}
bool operator>(const pair<T1, T2>& rhs)
{
if (first == rhs.first)
return second > rhs.second;
return first > rhs.first;
}
bool operator == (const pair<T1, T2>& rhs)
{
return first == rhs.first && second == rhs.second;
}
bool operator <=(const pair<T1, T2>& rhs)
{
return !(*this > rhs);
}
bool operator >=(const pair<T1, T2>& rhs)
{
return !(*this < rhs);
}
};
template<typename T1,typename T2>
pair<T1, T2> make_pair(T1 x, T2 y)
{
return pair<T1, T2>(x, y);
}
//在一个pair的子类map_pair中重新定义 运算符
template<typename K, typename T>
struct map_pair
{
typedef map_pair<K, T> self;
K first;
T second;
operator pair<K, T>()
{
return ministl::make_pair<K, T>(first, second);
}
map_pair(const pair<K, T>& rhs)
{
first = rhs.first;
second = rhs.second;
}
map_pair(const K& key, const T& val)
{
first = key, second = val;
}
bool operator==(const self& rhs) const
{
return first == rhs.first;
}
bool operator!=(const self& rhs) const
{
return !(*this == rhs);
}
bool operator<(const self& rhs) const
{
return first < rhs.first;
}
bool operator>(const self& rhs) const
{
return first > rhs.first;
}
bool operator>=(const self& rhs) const
{
return !(first < rhs.first);
}
bool operator<=(const self& rhs) const
{
return !(first > rhs.first);
}
};
}
#endif