Capt_S
#programowanie #cpp
http://www.cplusplus.com/reference/unordered_map/unordered_map/

Hash

A unary function object type that takes an object of type key type as argument and returns a unique value of type sizet based on it. This can either be a class implementing a function call operator or a pointer to a function (see constructor for an example). This defaults to hash, which returns a hash value with a probability of collision approaching 1.0/std::numericlimits::max().

Co to znaczy, jakiej kolizji, dlaczego i kiedy mam się tym przejmować?
  • Najlepsze
  • Wszystkie komentarze
tell_me_more
tell_me_more
  • adult
2
Treść przeznaczona dla osób powyżej 18 roku życia...
MamCieNaHita
@Capt_S: polecam się dokształcić z tego tematu: https://pl.wikipedia.org/wiki/Tablica_mieszaj%C4%85ca
Capt_S
Capt_S Autor
0
@tell_me_more: ah, bo ja tu za @MamCieNaHita już chciałem tworzyć vector z wartościami i się do niego odnosić, ale jeżeli mówisz, że to działa tak czy siak, a po prostu jest wolniejsze to sobie to daruję. Bałem się wyjątków. Dzięki. :)
running
Co to znaczy, jakiej kolizji, dlaczego i kiedy mam się tym przejmować?


@Capt_S: Masz poczytaj sobie ogólnie o [tablicach haszujących](https://pl.wikipedia.org/wiki/Tablica_mieszająca), w szczególności jak rozwiązywać problem kolizji i jakie wady ma taka tablica haszująca.
Capt_S
Capt_S Autor
0
generalnie to po prostu mam funkcję która zapisuje błąd do pliku, ale ze względu na asynchroniczną naturę mojego kodu, dodałem oczekiwanie na podstawie statycznego boola... ale plików jest kilka, a funkcja jedna więc chcę wiedzieć jaki to plik żeby nie czekać aż zwolnią się wszystkie.
tell_me_more
@Capt_S: z tego co piszesz to nie widzę potrzeby haszmapy, chcesz po prostu zrobić X asynchronicznych tasków i jak wszystkie się zakończą pójść dalej, tak?
Capt_S
Capt_S Autor
0
@tell_me_more: mam na dysku pliki z których korzystają różne funkcje. Piszę funkcję "otwórz plik(fileName)" i jeżeli ten plik jest zajęty to czekam aż zostanie zamknięty:

static bool GUARDED = false;

co_await
tell_me_more
@Capt_S: możesz zrobić haszmapę i takie rozwiązanie, ale możesz w ten sposób zrobić deadlocka, jak w jednym kawałku kodu masz:

otwórz plikA
otwórz plikB
zapisz plikA
Capt_S
Capt_S Autor
0
@tell_me_more: oj... czyli zwolnienie blokady dać jako osobną funkcję, przy zamykaniu pliku? Da się to jakoś zrobić, że będzie zwalniać automatycznie przy wyjściu jakiegoś pointera ze scope czy coś takiego?
tell_me_more
@Capt_S: zwalnianie automatyczne zwykle robi się RAII. https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization

Z tą haszmapą też da się to zrobić tylko musisz zapewnić, że kolejność blokowania i odblokowania plików jest zawsze taka sama. IMHO więcej roboty niż pożytku.
Capt_S
Capt_S Autor
0
IMHO więcej roboty niż pożytku.


@tell_me_more: tak czuję... :P