code-snippets/cpp/time_value_map.cpp

58 lines
1.2 KiB
C++
Raw Normal View History

2024-04-10 16:52:00 -04:00
#include <iostream>
#include <vector>
#include <map>
template <typename K, typename V>
class TimeValueMap
{
public:
void set(const K& key, const V& value, int timestamp)
{
_map[key][timestamp] = value;
}
V get(const K& key, int timestamp)
{
const auto values = _map.find(key);
if (values == _map.end())
{
return V();
}
const auto& values_map = values->second;
auto value = values_map.lower_bound(timestamp);
if (value == values_map.end())
{
if (timestamp > values_map.rbegin()->first)
{
return values_map.rbegin()->second;
}
return V();
}
if (value->first != timestamp)
{
if (value == values_map.begin())
{
return V();
}
value--;
}
return value->second;
}
private:
std::map<K, std::map<int, V>> _map;
};
int main()
{
TimeValueMap<std::string, std::string> map;
//map.set("a", "1", 1);
map.set("a", "2", 2);
map.set("a", "5", 5);
std::cout << map.get("a", 10) << '\n';
}