Ну, я не думаю, что эта структура присутствует из коробки в boost (хотя может существовать в другом месте), поэтому вы должны ее создать.Я бы не рекомендовал использовать operator[]()
, по крайней мере, так как это реализовано в std::map
, потому что это может затруднить отслеживание элементов, добавленных на карту (например, использование operator[]()
со значением добавляет это пустое значениена карту) и перейти к более явным операциям get и put для добавления и извлечения элементов карты.
Что касается простейшей реализации, я бы использовал фактическое map
в качестве хранилища,и deque
для хранения добавленных элементов (не проверено):
template <typename K, typename V>
struct BoundedSpaceMap
{
typedef std::map<K,V> map_t;
typedef std::deque<K> deque_t;
// ...
typedef value_type map_t::value_type;
// Reuse map's iterators
typedef iterator map_t::iterator;
// ...
iterator begin() { return map_.begin(); }
// put
void put ( K k, V v)
{ map_.insert(std::make_pair(k,v));
deque_.push_back(k);
_ensure(); // ensure the size of the map, and remove the last element
}
// ...
private:
map_t map_;
deque_t deque_;
void _ensure() {
if (deque_size() > LIMIT) {
map_.erase(deque_.front()); deque_.pop_front();
}
}
};