Potrzebuję unikatowych identyfikatorów wielokrotnego użytku. Użytkownik może wybrać własne identyfikatory lub może poprosić o darmowy. API jest w zasadzieNajszybszy kontener lub algorytm dla unikalnych identyfikatorów wielokrotnego użytku w 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.
};
Załóżmy identyfikatory zdarzyć rozpocząć się 1 i postępu, 2, 3, itd To nie jest wymóg, żeby pomóc zilustrować.
IdManager mgr;
mgr.MarkAsUsed(3);
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
Czy drukować
1
2
4
Bo id 3 zostało już uznane za wykorzystane.
Jaki jest najlepszy kontener/algorytm, aby pamiętać, które identyfikatory są używane I znaleźć wolny identyfikator?
Jeśli chcesz znać konkretny przypadek użycia, glGenTextures OpenGL, w glBindTexture i glDeleteTextures są równoważne AllocateId, MarkAsUsed i FreeId
AllcoatedId() oznaczy go jako używany również? – Naveen
co jest nie tak z po prostu przypisaniem OpenGL i śledzeniem identyfikatorów? – jalf
Piszę sterownik GL. Dlatego Tak, AllocateId() oznaczy ją jako użytą. – gman