std::hash



  • Hallo
    ich habe eine eigene Klassen, die ich in einem HashSet speichern will.
    dafür brauch ich eine eigene hash-funktion.
    ich dachte man spezialisiert einfach die std::hash.
    also so:

    template<> struct std::hash<MeineKlasse>
    {
      size_t operator()(const T& value)
      {
        std::hash<str::string> strhash;
        return strhash(T.getName());
      }
    }
    

    leider funkt mir dann der compliter: "E2299 Cannot generate template specialization from 'specifier'"
    specifier ist dann die std::hash.
    wieso gehtn das nicht? oder ist das nur wegen dem BorlandCB++6.0 compiler?



  • Du solltest zumindest das ganze im namespace std machen und nicht std:: spezifizieren:

    namespace std {
      template ...
    
    }
    


  • irgendwie versteh ich template-spezialisierung nicht so ganz.
    wenn ich so eine Klasse habe:

    template <class T>
    class MeineKlasse
    {
      std::string getName() const;
      // irgendwas
    };
    

    und jetzt will ich diese klasse in einem HashSet speichern.
    wie spezialisiere ich die std::hash ?
    kann mir einer bitte helfen, ich habe nämlich probleme das die klasse auch eine template ist.



  • DEvent schrieb:

    Hallo

    template<> struct std::hash<MeineKlasse>
    {
      size_t operator()(const T& value) //<---- sollte da nicht MeineKlasse stehen ?
      {
        std::hash<str::string> strhash;
        return strhash(T.getName());
      }
    }
    


  • Hallo,
    da MeineKlasse ein Template ist, muss du std::hash entweder partiell spezialisieren oder aber explizit für eine konkrete Instanz von MeineKlasse.
    Das

    template<> struct std::hash<MeineKlasse>
    {...}
    

    hingegen kann natürlich nicht funktionieren.


Anmelden zum Antworten