Ich benötige eindeutige, wiederverwendbare Kennungen. Der Benutzer kann seine eigene Kennung wählen oder eine freie Kennung anfordern. Die API ist grundsätzlich
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.
};
Angenommen, die IDs beginnen bei 1 und gehen weiter zu 2, 3 usw. Dies ist keine Voraussetzung, sondern dient nur der Veranschaulichung.
IdManager mgr;
mgr.MarkAsUsed(3);
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
Würde drucken
1
2
4
Denn id 3 wurde bereits für benutzt erklärt.
Was ist der beste Container / Algorithmus, um sich zu merken, welche IDs verwendet werden UND eine freie ID zu finden?
Wenn Sie einen speziellen Anwendungsfall kennenlernen möchten, sind OpenGLs glGenTextures, glBindTexture und glDeleteTextures äquivalent zu AllocateId, MarkAsUsed und FreeId