-
Notifications
You must be signed in to change notification settings - Fork 1
/
Set.go
69 lines (57 loc) · 787 Bytes
/
Set.go
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
package Set
type Set map[int]bool
func (s Set) Add(id int) {
s[id] = true
}
func NewSet() Set {
return make(map[int]bool)
}
func (s Set) Copy() Set {
tmp := NewSet()
for v := range s {
tmp.Add(v)
}
return tmp
}
func (s Set) Size() int {
return len(s)
}
func (s Set) Merge(an Set) {
for v := range an {
s[v] = true
}
}
func (s Set) Has(v int) bool {
_, ok := s[v]
return ok
}
func (s Set) Remove(v int) {
delete(s, v)
}
func (s Set) HasIntersection(an Set) bool {
var a, b Set
if s.Size() < an.Size() {
a = s
b = an
} else {
a = an
b = s
}
for v := range a {
if b.Has(v) {
return true
}
}
return false
}
func (s Set) Clear() {
for v := range s {
s.Remove(v)
}
}
func (s Set) Top() int {
for v := range s {
return v
}
return -1
}