Necesito identificadores únicos reutilizables. El usuario puede elegir sus propios identificadores o puede solicitar uno gratis. El API es básicamenteContenedor o algoritmo más rápido para identificadores únicos reutilizables en C++
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's the user register an id.
// returns false if the id was already used.
bool IsUsed(int id); // Returns true if id is used.
};
Supongamos identificadores de pasar a empezar a 1 y el progreso, 2, 3, etc. Esto no es un requisito, sólo para ayudar a ilustrar.
IdManager mgr;
mgr.MarkAsUsed(3);
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
imprimiría
1
2
4
Debido Identificación 3 ya ha sido declarado utilizado.
¿Cuál es el mejor contenedor/algoritmo para recordar qué identificadores se utilizan Y encontrar una identificación gratuita?
Si desea conocer el un caso de uso específico, glGenTextures de OpenGL, glBindTexture y glDeleteTextures son equivalentes a AllocateId, MarkAsUsed y FreeId
¿AllcoatedId() lo marcará como usado también? – Naveen
¿Qué hay de malo en dejar que OpenGL asigne y realice un seguimiento de los ID para usted? – jalf
Escribo un controlador GL. Es por eso que Sí, AllocateId() lo marcará como usado. – gman