该std::map<>类型没有插入元素的概念.它仅用于保存键/值对映射.它也没有插入顺序的概念,所以它甚至不能提供相对类型的插入.
要做你想做的事,你需要在元素和插入时间之间添加关联.如果你想要的只是相对顺序,那么你可以使用std::queue与地图配对.每次插入地图时,都会插入到地图中std::queue.队列前面的元素比后面的元素更长,您可以将它用于相对年龄
非常接近LRU Cache。
该Boost.MultiIndex的库显示的例子MRU高速缓存(最近使用),所以它适应LRU应该是微不足道的。
基本上这个想法是并行维护两个数据结构:
map中的项目deque包含对地图的引用基本代码:
static double const EXPIRY = 3600; // seconds
std::map<Key, Value> map;
std::deque<std::pair<std::map<Key, Value>::iterator, time_t>> deque;
bool insert(Key const& k, Value const& v) {
std::pair<std::map<Key, Value>::iterator, bool> result =
map.insert(std::make_pair(k, v));
if (result.second) {
deque.push_back(std::make_pair(result.first, time()));
}
return result.second;
}
// to be launched periodically
void clean() {
while (not deque.empty() and difftime(time(), deque.front().second) > EXPIRY) {
map.erase(deque.front().first);
deque.pop_front();
}
}
Run Code Online (Sandbox Code Playgroud)
当然,如果要获得多线程代码,这些结构需要同步。
| 归档时间: |
|
| 查看次数: |
3728 次 |
| 最近记录: |