# Time Based [[key-val|Key-Value]] Store
With dictionary:
```python
class TimeMap(defaultdict):
def __init__(self):
super().__init__(dict)
def set(self, key: str, value: str, timestamp: int) -> None:
self[key][timestamp] = value
def get(self, key: str, timestamp: int) -> str:
max_time = 0
res = ""
for time, val in super().get(key, {}).items():
if max_time < time <= timestamp:
max_time = time
res = val
return res
```
With binary search
```python
class TimeMap(defaultdict):
def __init__(self):
super().__init__(list)
def set(self, key: str, value: str, timestamp: int) -> None:
self[key].append((timestamp, value))
def get(self, key: str, timestamp: int) -> str:
index = bisect_right(super().get(key, []), timestamp, key=lambda x: x[0])
return self[key][index - 1][1] if index else ""
```
Notice the usage of `bisect_right`.