У меня есть потребность в уникальных идентификаторах многократного использования. Пользователь может выбрать свои собственные идентификаторы, или он может попросить бесплатный. API в основном
class IdManager {
public:
int AllocateId(); // Allocates an id
void FreeId(int id); // Frees an id so it can be used again
bool MarkAsUsed(int id); // Let the user register an id.
// returns false if the id was already used.
bool IsUsed(int id); // Returns true if id is used.
};
Предположим, что идентификаторы начинаются с 1 и прогресс, 2, 3 и т.д. Это не требование, просто чтобы проиллюстрировать.
IdManager mgr;
mgr.MarkAsUsed(3);
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
Выведет
1
2
4
Потому что id 3 уже объявлен используемым.
Какой лучший контейнер/алгоритм для обоих помнят, какие идентификаторы используются И найти бесплатный id?
Если вы хотите узнать конкретный вариант использования, OpenGL glGenTextures, glBindTexture и glDeleteTextures эквивалентны AllocateId, MarkAsUsed и FreeId