Khá gần với LRU Cache.
Thư viện Boost.MultiIndex hiển thị ví dụ về MRU Cache (Được sử dụng gần đây nhất), do đó, điều chỉnh nó thành LRU sẽ không đáng kể.
Về cơ bản các ý tưởng là để duy trì hai cấu trúc dữ liệu song song:
- một
map
với các mục trong
- một
deque
với sự tham khảo vào bản đồ
mã cơ bản:
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();
}
}
Tất nhiên, những cấu trúc đó cần b e được đồng bộ hóa nếu mục đích là lấy mã đa luồng.
Nguồn
2012-03-15 15:59:00
bạn có thể muốn xem các hộp chứa nhiều chỉ mục tăng cường – PlasmaHH
Cũ? Bạn cần một tiêu chí nhất định để thực hiện một hành động, trừ khi bạn xác định một hành động, Q là khá nhiều hướng. –
@PlasmaHH có thể không được sử dụng trong dự án này – theAlse