• 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
61 wizyt
pytanie zadane 9 października 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 przez adrian17 VIP (145,640 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ź 200 wizyt
pytanie zadane 5 września 2016 w Algorytmy przez Rafał Nowak Nowicjusz (200 p.)
0 głosów
3 odpowiedzi 159 wizyt
pytanie zadane 6 marca w Java przez andrut Użytkownik (790 p.)
0 głosów
1 odpowiedź 98 wizyt
pytanie zadane 14 października w Bezpieczeństwo, hacking przez Mariusz. B Nowicjusz (240 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

56,369 zapytań

101,066 odpowiedzi

208,200 komentarzy

28,039 pasjonatów

Przeglądających: 327
Pasjonatów: 11 Gości: 316

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.

...