„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man eine generische Hash -Funktion für Tupel in ungeordneten Sammlungen implementieren?

Wie kann man eine generische Hash -Funktion für Tupel in ungeordneten Sammlungen implementieren?

Gepostet am 2025-03-26
Durchsuche:103

How to Implement a Generic Hash Function for Tuples in Unordered Collections?

generische Hash -Funktion für Tupel in nicht ordnungsgemäßen Sammlungen

Die std :: unbestrahlte_Map und std :: unconded_set Container bieten effiziente Aussehen und Ein- und Ein- und Ein- und Ein- und Einfügen, die auf ihren hashierten Werten basieren. Die Verwendung von Tupeln als Schlüssel in diesen Sammlungen ohne die Definition einer benutzerdefinierten Hash -Funktion kann jedoch zu unerwartetem Verhalten führen.

Um dies zu korrigieren Struktur std :: Hash > { size_t operator () (std :: tuple const & tuple) const {...} };

template
struct std::hash<:tuple int>> {
  size_t operator()(std::tuple const& tuple) const { ... }
};

#include Namespace std { Namespace { // Code aus Boost abgeleitet Vorlage Inline void Hash_combine (std :: size_t & saat, t const & v) {...} // rekursiver Vorlagencode von Matthieu M. Vorlage :: value - 1> struct HashValueImpl {...}; } Vorlage struct hash > { size_t operator () (std :: tuple const & tuple) const {...} }; }

#include 

namespace std {
  namespace {

    // Code derived from Boost
    template
    inline void hash_combine(std::size_t& seed, T const& v) { ... }

    // Recursive template code from Matthieu M.
    template::value - 1>
    struct HashValueImpl { ... };

  }

  template
  struct hash<:tuple>> {
    size_t operator()(std::tuple const& tuple) const { ... }
  };
}

namespace my_hash { // Nicht-Tupel-Typen an den Std :: Hash weiterleiten Vorlage struct hash {...}; // Geben Sie den optimierten Hash für Tupel an Vorlage struct hash > {...}; }

Bei Verwendung dieser Lösung muss die nicht ordnungsgemäße Sammlung die benutzerdefinierte Hash -Implementierung wie folgt ausdrücklich verweisen: unconded_set , std :: hash >, std :: Equal_to > > Test;

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3