Maison > développement back-end > C++ > Pourquoi ne puis-je pas utiliser `std::pair` comme clé dans un `std::unordered_map` et comment puis-je y remédier ?

Pourquoi ne puis-je pas utiliser `std::pair` comme clé dans un `std::unordered_map` et comment puis-je y remédier ?

Linda Hamilton
Libérer: 2024-12-07 02:57:12
original
867 Les gens l'ont consulté

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

Pourquoi ne puis-je pas compiler une carte unordered_map avec une paire comme clé ?

Le problème rencontré ici est l'absence d'une fonction de hachage appropriée pour le type de clé. Pour résoudre ce problème, fournissez une fonction de hachage personnalisée pour la clé de paire. Voici un exemple :

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

struct pair_hash {
    template <class T1, class T2>
    std::size_t operator() (const std::pair<T1,T2>& p) const {
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);

        return h1 ^ h2;  // Simple example, for better results use boost.hash_combine
    }
};

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
Copier après la connexion

Avec cette fonction de hachage personnalisée, vous pouvez désormais créer une carte unordered_map sans erreurs de compilation. Notez que la fonction de hachage fournie ici est simpliste à des fins de démonstration. Pour des scénarios réels, envisagez d'utiliser des techniques telles que boost.hash_combine de Boost pour améliorer la qualité de votre fonction de hachage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal