如果我想拥有一个只存储热门内容的固定大小的缓存,我该怎么办?我不想发明轮子。修复地图的大小很简单,
static const int max_size = 100;
std::map<key_t, value_t> cache_map_t;
cache_map_t::const_iterator it = m_table.find( key );
if ( it != m_table.end() && m_table.size() == max_size ) {
// handle error, throw exception...
} else {
m_table.insert( it, std::make_pair(key,value) );
}
并且为了找到不受欢迎的东西,我可以继续插入直到达到max_size,同时有一个“访问计数器”,它存储每个元素被访问的时间。达到max_size后,我可以对相应的计数器进行一次传递,并删除访问次数最少的元素。但是这第二部分效率不高,并且想知道是否有更好的解决方案。