• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

unorderd_map - zmiana funkcji haszującej

0 głosów
71 wizyt
pytanie zadane 9 października 2018 w C i C++ przez malina314 Nowicjusz (120 p.)
W C++ w STLu dostępny jest kontener o nazwie unorderd_map. Działa on szybciej od zwykłej mapy, bo haszuje klucze. Moje pytanie dotyczy właśnie haszowania. Jak zmienić domyślną funkcję haszującą na własną? Proszę o w miarę proste wytłumaczenie, bo mam z tym problem. Właściwie to nie wiem jak się za to zabrać, bo nigdy nie zmieniałem domyślnych funkcji w kontenerach STLowych, a całej mapy od zara nie będę pisał.

1 odpowiedź

+2 głosów
odpowiedź 9 października 2018 przez adrian17 Mędrzec (173,880 p.)

Są dwa główne sposoby:

- możesz przekazać do szablonu własną funkcję hashującą (w ten sposób możesz przeciążyć domyślne zachowanie dla typów takich jak int)

- zdefiniować domyślny hasher dla własnego typu, dzięki czemu std::unordered_map będzie go używał automatycznie (bez konieczności podawania go w argumentach szablonu).

#include <unordered_map>

struct Struktura{
    int jakies_dane;
};

struct MyHash {
  std::size_t operator()(const int& k) const {
    return 123;
  }
};

namespace std {
  template<>
  struct hash<Struktura> {
    std::size_t operator()(const Struktura& k) const {
      return 123;
    }
  };
}

void f(){
    std::unordered_map<int, int> a; // po prostu
    std::unordered_map<int, int, MyHash> b; // custom hash
    std::unordered_map<Struktura, int> c; // hash dla Struktura uzyty automatycznie
}

 

Podobne pytania

+1 głos
1 odpowiedź 261 wizyt
pytanie zadane 5 września 2016 w Algorytmy przez Rafał Nowak Nowicjusz (200 p.)
0 głosów
3 odpowiedzi 245 wizyt
pytanie zadane 6 marca 2018 w Java przez andrut Użytkownik (870 p.)
0 głosów
0 odpowiedzi 49 wizyt
pytanie zadane 19 listopada 2018 w Inne języki przez ArturoS159 Początkujący (350 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

62,318 zapytań

108,452 odpowiedzi

226,402 komentarzy

35,113 pasjonatów

Przeglądających: 232
Pasjonatów: 7 Gości: 225

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...