Прежде всего, структура map
- это не hash table
, а скорее сбалансированное двоичное дерево. Это влияет на время поиска O(log N)
вместо O(1)
для оптимальной реализации хеширования. Это может повлиять или не повлиять на вашу проблему (если количество реальных ключей и операций невелико, этого может быть достаточно, но эмуляция кэша может быть как-то неоптимальной.
Самое простое решение, которое вы можете сделать, - это инкапсулировать фактическую структуру данных в класс, который проверяет размер в каждой вставке (поиск размера должен быть реализован в постоянное время во всех реализациях STL) и завершится неудачей, если пытаемся добавить слишком много элементов.
class cache {
public:
static const int max_size = 100;
typedef std::map<key_t, value_t> cache_map_t;
void add( key_t key, value_t value ) {
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) );
}
}
private:
cache_map_t m_table;
};
// Don't forget, in just one translation unit:
const int cache::max_size;