hash_set¶
ソースコード¶
from titan_pylib.data_structures.safe_hash.hash_set import HashSet
展開済みコード¶
1# from titan_pylib.data_structures.safe_hash.hash_set import HashSet
2from typing import Iterable
3from random import Random
4
5
6class HashSet:
7
8 _r = Random()
9 _xor = _r.randrange(10000000, 1000000000)
10
11 def __init__(self, a: Iterable[int] = []):
12 self._data: set[int] = set(x ^ self._xor for x in a)
13
14 def add(self, key: int) -> None:
15 self._data.add(key ^ self._xor)
16
17 def discard(self, key: int) -> None:
18 self._data.discard(key ^ self._xor)
19
20 def remove(self, key: int) -> None:
21 self._data.remove(key ^ self._xor)
22
23 def __contains__(self, key: int):
24 return key ^ self._xor in self._data
25
26 def __len__(self):
27 return len(self._data)
28
29 def __iter__(self):
30 return (k ^ self._xor for k in self._data.__iter__())
31
32 def __str__(self):
33 return "{" + ", ".join(sorted(map(str, self))) + "}"
34
35 def __repr__(self):
36 return f"{self.__class__.__name__}({self})"