• 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
64 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 (156,520 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ź 219 wizyt
pytanie zadane 5 września 2016 w Algorytmy przez Rafał Nowak Nowicjusz (200 p.)
0 głosów
3 odpowiedzi 201 wizyt
pytanie zadane 6 marca 2018 w Java przez andrut Użytkownik (870 p.)
0 głosów
0 odpowiedzi 40 wizyt
pytanie zadane 19 listopada 2018 w Inne języki przez ArturoS159 Początkujący (350 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

59,025 zapytań

104,411 odpowiedzi

215,972 komentarzy

31,417 pasjonatów

Przeglądających: 314
Pasjonatów: 16 Gości: 298

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.

...