add time value map
This commit is contained in:
parent
c7d2b6269c
commit
a8015244cb
|
@ -0,0 +1,58 @@
|
||||||
|
#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';
|
||||||
|
}
|
Loading…
Reference in New Issue