Coś jak Dictionary<int,string> w C

0

Cześć,
Mam takie pytanko. Jest jakiś prosty sposób aby zapisać w C coś ala słownik z kluczem [int] i wartością [char*] na jakiegoś stringa ?
Chodzi mi o to, że mam jakieś tam wartości w enum i chciałbym mieć przy okazji coś co zwraca mi wartości z klucza.
To znaczy normalnie mam tak:

typedef enum someenum
{
     TEST_ONE = 1,
} example

i używam TEST_ONE jako zamiennik 1, a teraz chciałbym żeby to '1' było zamienione na "TEST_ONE\0" (char*)
Pozdr.

0

Taka mapa z kluczem który jest intem to sie nazywa tablica po prostu. Ale w twoim przypadku lepiej chyba zrobić sobie tam strukturę która przechowuje tego enuma i twoją wartość?

0

Na pewno chodzi o C a nie o C++?

Bo wprawdzie dla C są jakieś tam biblioteki to wspierające, ale czy ktoś tego używa - nie wiem.

Przykład - GLib
https://developer.gnome.org/glib/stable/glib-Hash-Tables.html
https://www.ibm.com/developerworks/linux/tutorials/l-glib/

0

@Shalom:
Tablica nie zadziała. Nie widać tego na pierwszy rzut oka, ale w enumie mogę przechować większy zakres wartości niż posiada sam int np.: TEST_ONE = 0x7FFFFFF0 lub TEST_ONE = 0x80000000 tak więc zakres inta jest poza zakresem tablicy (wiesz o co chodzi).
Chyba jestem zmuszony użyć po prostu funkcji zwracającej tego char* i przyjmującego wartość z enuma ze switchem.

I jeszcze jedno - może źle się wyraziłem z tym dictionary i nie do końca się zrozumieliśmy. Chodziło mi o (może istniejącą) jakąś sztuczkę językową/nietypowy zapis który w prosty sposób pozwoli się odwoływać klucz/char*.

Pozdrawiam

0

@NeuroXiq oj no możesz napisać własną hashmapę, co za problem? To nie jest jakaś magiczna struktura danych, niedostętpna dla śmiertelnika. Ot choćby robisz tablicę o N elementach a potem indeks losujesz przez ten_twój_int % N więc liczysz resztę z dzielenia, tak żeby lądować zawsze w tablicy. W tablicy możesz mieć listy jednukierunkowe na elementy dla których wychodzi ten sam indeks. Ot klasyczna hashtable z rozwiązywaniem konfliktów za pomocą listy.

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