Sposób przechowywania UUIDv4 (typ danych).

0

Witam,

W programie który piszę w ramach projektu z Programowania Obiektowego, wykorzystuje UUIDv4. Obecnie przechowuje go w stringu, jednak prowadzący zwrócił mi uwagę, że nie jest to najlepszy sposób, między innymi dlatego, że porównywanie 2 stringów jest dość powolne. Poradził mi przemyślenie tego.

W pierwszej kolejności wymyśliłem żeby stworzyć klasę która będzie zawierała w sobie tablice (może wektor) liczbowy, składający się z 5 pól. Jednak po chwili zrezygnowałem z tego, gdyż musiałoby to przechowywać ogromne liczby (ostatnie pole ma 12 znaków) i pojawiał się problem z myślnikami (def. http://en.wikipedia.org/wiki/Universally_unique_identifier#Definition). Dodatkowym problemem też były zera na początku jednego z pól (jak np. 5a80aac0-c88a-11e2-8b8b-0800200c9a66).

Kolejnym pomysłem z którego jednak szybko zrezygnowałem było użycie tablicy charów, jednak to wszyłoby chyba na prawie to samo co z użyciem stringów?

I od tej pory brak mi pomysłów jak to można jeszcze inaczej rozwiązać, także prosiłbym, o udzielenie jakiś wskazówek jeśli jesteście w stanie.

Pozdrawiam.

0

Przecież to jest zwykła 256-bitowa liczba.
Możesz też przedstawić ją następująco:

struct UUIDv4
  {
   unsigned A:32,B:16,C:16,D:16,E1:16,E2:32;
  };

UUIDv4 u={0x5a80aac0,0xc88a,0x11e2,0x8b8b,0x0800,0x200c9a66};
cout
   <<setw(8)<<setfill('0')<<hex<<u.A<<'-'
   <<setw(4)<<setfill('0')<<hex<<u.B<<'-'
   <<setw(4)<<setfill('0')<<hex<<u.C<<'-'
   <<setw(4)<<setfill('0')<<hex<<u.D<<'-'
   <<setw(4)<<setfill('0')<<hex<<u.E1
   <<setw(8)<<setfill('0')<<hex<<u.E2
   <<endl
  ;
0

Cóż, w ten sposób nie pomyślałem..

Mógłbyś dodatkowo wyjaśnić zapis "A:32" [...] ? Pierwszy raz z czymś takim się spotykam.

0
tariel36 napisał(a):

... wyjaśnić zapis "A:32" [...]

Po pierwsze koniecznie: unsigned A:32
Po drugie: http://pl.wikipedia.org/wiki/Pola_bitowe_%28C%2B%2B%29

1 użytkowników online, w tym zalogowanych: 0, gości: 1