【发布时间】:2015-01-18 18:17:41
【问题描述】:
我面前有一个任务来实现 LRU 缓存。而系统中最长的操作应该是O(log (n))。作为我的缓存,我使用std :: MAP。我仍然需要第二个容器来存储密钥 + 创建时间 - 按时间排序。当我需要将地址更新到缓存时,它应该在某个地方:
- 按键查找
O(log (n))。 - 删除到迭代器
O(1)。 - 插入
O(log (n))的新元素。
最老的成员必须自然居住在container.begin()。
我只能使用 STL。
列表 - 不适合我。
list.find() - O (n)
优先队列 - 删除未实施的项目。
我认为理想情况下它可以存储在std::set;
std::set<pair<KEY, TIME>>;
排序std::set:
struct compare
{
bool operator ()(const pair<K, TIME> &a, const pair<K, TIME> &b)
{
return a.second < b.second;
}
};
并在 std :: set 中找到一个键来编写查找该对的第一个元素的函数 - std::set<pair<KEY, TIME>>;。
你怎么看?谁能告诉我这是否符合我指定的复杂性要求?
【问题讨论】:
标签: algorithm caching c++11 stl