Maison > développement back-end > C++ > Comment utiliser des paires comme clés dans des cartes non ordonnées ?

Comment utiliser des paires comme clés dans des cartes non ordonnées ?

Mary-Kate Olsen
Libérer: 2024-12-11 06:55:09
original
233 Les gens l'ont consulté

How to Use Pairs as Keys in Unordered Maps?

Comprendre les paires comme clés dans les cartes non ordonnées

Lorsqu'ils tentent de créer une carte non ordonnée avec une paire comme clé, les utilisateurs peuvent rencontrer une compilation erreur. Cette erreur résulte de l'absence d'une fonction de hachage appropriée pour le type de clé personnalisé, paire.

Pour résoudre ce problème, std::unordered_map demande aux utilisateurs de fournir une fonction de hachage spécifiquement conçue pour le type de clé. Cette fonction est chargée de mapper la clé à un identifiant unique, ce qui est crucial pour une récupération rapide et efficace.

Mise en œuvre d'une fonction de hachage personnalisée

Une méthode simple, bien que non une fonction de hachage optimale pour une paire de types std::hash-able peut être implémentée comme suit :

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; // Combine the hashes using a simple XOR
    }
};
Copier après la connexion

Utilisation de la fonction de hachage personnalisée

Une fois la fonction de hachage définie, elle peut être utilisée avec std::unordered_map pour résoudre l'erreur de compilation :

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

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

int main() {
    Unordered_map um;
}
Copier après la connexion

Solutions alternatives

Pour une prise en charge plus large et de meilleures performances, envisagez d'utiliser des bibliothèques comme Boost. Boost fournit :

  • boost::hash_combine : une méthode plus robuste pour combiner des hachages
  • fonction set_hash_value : prépare les fonctions de hachage pour les types standard comme std::pair

En tirant parti de ces options, les utilisateurs peuvent garantir un hachage fiable pour leurs types de clés personnalisés dans std::unordered_map, permettant des performances de code efficaces et optimales.

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