Skocz do zawartości

C tablice asocjacyjne, jak zaimplementować?


_LM_

Pomocna odpowiedź

Cześć, poszukuję przykładów w języku C dla tablic, gdzie do pól mogę się odwołać przez klucz. W javie istnieje coś takiego jak typ map, gdzie zarówno klucz jak i wartość mogą przyjmować dowolny typ danych. W C trzeba to napisać od podstaw, lub skorzystać z gotowych przykładów ale coś mało jest w tym temacie materiałów, a jeśli już są to korzystają z C++ gdzie jest nawet biblioteka wbudowana <map.h> 

EDIT zapomniałem dorzucić link do tego co już znalazłem: https://ucgosu.pl/2019/07/tablice-przyspieszajace-wyszukiwanie-elementow/ oraz link z artykułu https://github.com/jamesroutley/write-a-hash-table

Edytowano przez _LM_
Link do komentarza
Share on other sites

Dzięki @ethanak zaraz się zapoznam. Mam pytanie co do kodu haszującego z gita:

https://github.com/jamesroutley/write-a-hash-table/tree/master/03-hashing

// hash_table.c
static int ht_hash(const char* s, const int a, const int m) {
    long hash = 0;
    const int len_s = strlen(s);
    for (int i = 0; i < len_s; i++) {
        hash += (long)pow(a, len_s - (i+1)) * s[i];
        hash = hash % m;
    }
    return (int)hash;
}

Czy jest jakaś możliwość aby to preprocesor poukładał zestawy danych w tablicach? Chodzi mi dane const aby nie zużywać pamięci ram?

Link do komentarza
Share on other sites

No, jeśli chcesz bardzo oszczędzać pamięć to tego typu tablice akurat pamięciooszczędne nie są. W przypadku małej tablicy lepiej po prostu przemiatać tablicę pętlą. Przy większych możesz sobie przygotować posortowane klucze i przeszukiwać np. bsearchem (ja tak robię w przypadku słowników syntezatora, a one raczej małe nie są).

Ogólnie hash tables są raczej do tablic dynamicznych które ze swej natury siedzą w RAM-ie.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

17 minut temu, ethanak napisał:

Ogólnie hash tables są raczej do tablic dynamicznych które ze swej natury siedzą w RAM-ie.

Aha, po zapoznaniu tematu też doszedłem do takiego wniosku, i fakt można by ręcznie poustawiać indeksy dla elementów stałych np: wygenerować je wcześniej, ale to mija się z celem bo dodanie kolejnego zestawu wymusi przeliczenie indeksów na nowo. Dzięki za odpowiedź!

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.