Как видно из заголовка, я ищу связанный массив (например, карту) с линейным потреблением памяти (например, std :: vector), где ключи автоматически c генерируются для новых записей. N <128. </p>
Например, мы будем использовать это для шаблона наблюдателя, где вы можете зарегистрировать обратные вызовы для события изменения значения. В ответ вы получаете идентификатор (целое число). С этим идентификатором вы можете позже отменить регистрацию вашего обратного вызова.
Код псевдонима:
/// Registers a callback and returns an associated id to it.
int register_callback(std::function callback);
/// Returns true if callback was unregistered for given id.
bool unregister_callback(int id);
Поскольку это должно использоваться во встроенных устройствах с ограничением памяти, я не буду использовать карту в качестве контейнера ( см. здесь: http://jsteemann.github.io/blog/2016/06/14/how-much-memory-does-an-stl-container-use/, карта использует в ~ 5 раз больше памяти, чем вектор).
У меня есть некоторые идеи, как реализовать это самостоятельно, но мне интересно, существует ли какое-либо имя / концепция для этого уже?
Это было бы моей идеей:
template<typename T>
class custom_map { // Totally unsure with naming
// coll_ is sorted.
std::vector<std::pair<uint8_t, T>> coll_;
public:
uint8_t add(T) {
// Find unused id by iterating over coll_,
// If ((prev id + 1) != (next id)), free id found.
// Insert into coll new pair and sort.
}
bool remove(uint8_t id) {
// Remove element in coll with associated id
// Binary search would be faster but only for bigger sizes, so linear search?
}
// Iterator concept begin/end... to iterate over collection.
};