Помимо использования set
, вы можете сохранить список назначенных (или свободных) ключей и найти новый ключ перед вставкой.Для map
, индексированного int
, вы можете просто взять последний элемент и увеличить его ключ.Но я скорее думаю, я бы пошел с простой std::vector
;если удаление не поддерживается, вы можете сделать что-то простое, например:
int key = myVector.size();
myVector.push_back( newEntry );
Если вам нужно поддерживать удаление, то используйте вектор какого-то типа «возможно» (boost::optional
и т. д.вы, вероятно, уже есть в вашем наборе инструментов, может быть, под названием Fallible или Maybe) может быть уместным.В зависимости от шаблонов использования (количество удалений по сравнению с общим количеством записей и т. Д.) Может потребоваться выполнить поиск в векторе, чтобы повторно использовать записи.Если вы действительно амбициозны, вы можете сохранить битовую карту бесплатных записей, устанавливая бит каждый раз, когда вы удаляете и вводите, и сбрасывая его всякий раз, когда вы снова используете пробел.