我想在C ++中实现模板化且受内存限制的缓存。
我可以很容易地根据大小等一些基本值,在大小达到一定限制时建议第一项
memlimit / (sizeof(TKey) + sizeof(TVal))
但我理想情况下想应用一些逻辑,以便将“最不有价值”的物品逐出。 我的想法是逻辑将遵循以下原则:
有人可以建议这种逻辑是否合理吗?
这是受欧拉计划问题的启发,但并非特定于其中一个问题-我想制作一个通用组件,这对于其他事情来说将是一个非常不错的通用工具。
有没有适合的现成商品?
我开始像
template<class TKey, class TValue>
public class cache
{
public:
std::map<TKey, TValue> values;
void encache(const TKey& key, const TKey& value)
{
if(values.insert(std::pair<TKey, TValue>(key, value))
{
if(values.size() > 10000000 /* some limit */ )
{
// evict the 'worst' values - ???
}
}
}
}
但不确定用于存储值的最佳数据结构以及驱逐算法的外观。