Maison > développement back-end > C++ > le corps du texte

Utilisation d'une table de hachage pour implémenter la recherche de chaînes en C++

PHPz
Libérer: 2023-08-22 12:03:18
original
1105 Les gens l'ont consulté

Utilisation dune table de hachage pour implémenter la recherche de chaînes en C++

La table de hachage est une structure de données très courante qui mappe les valeurs clés dans une table de taille fixe, permettant des opérations efficaces de recherche, d'insertion et de suppression. En C++, nous pouvons utiliser unordered_map dans STL (Standard Template Library) pour implémenter une table de hachage.

Dans les applications pratiques, il est souvent nécessaire d'effectuer des opérations de recherche sur des chaînes. Par exemple, recherchez le nombre d'occurrences d'un certain mot-clé dans un texte ou recherchez toutes les lignes contenant une certaine chaîne. Pour accomplir ces tâches efficacement, des recherches de chaînes peuvent être implémentées à l'aide de tables de hachage.

Dans cet article, nous présenterons la méthode spécifique d'utilisation de la table de hachage pour implémenter la recherche de chaîne en C++. Nous utiliserons l'exemple de la recherche du nombre de fois qu'une chaîne apparaît dans un texte.

Tout d'abord, nous devons définir une fonction pour mapper les chaînes dans une table de hachage. Une méthode courante consiste à utiliser la valeur de hachage de la chaîne comme valeur de clé, garantissant ainsi que différentes chaînes correspondent à différents emplacements. Pour qu'une fonction de hachage ait de bonnes performances, elle doit être calculée rapidement et l'apparition de conflits de hachage doit être minimisée.

Voici une implémentation simple d'une fonction de hachage qui ajoute les codes ASCII des chaînes et prend le reste :

size_t hash_func(const std::string& str) {
    size_t hash_val = 0;
    for (char c : str) {
        hash_val += static_cast<size_t>(c);
    }
    return hash_val % MAP_SIZE;
}
Copier après la connexion

Ensuite, nous devons insérer chaque mot du texte dans la table de hachage. Nous pouvons insérer le texte dans une table de hachage en le divisant en mots par des espaces et en appelant une fonction de hachage. Puisqu’un mot-clé peut apparaître plusieurs fois, nous devons enregistrer le nombre de fois où chaque mot-clé apparaît. Nous pouvons utiliser unordered_map pour réaliser cette fonction. Si la valeur de la clé existe déjà lors de l'insertion, la valeur sera incrémentée :

std::unordered_map<std::string, size_t> word_map;
for (std::string word : words) {
    if (word_map.find(word) == word_map.end()) {
        word_map[word] = 1;
    } else {
        ++word_map[word];
    }
}
Copier après la connexion

Enfin, nous pouvons obtenir son occurrence dans le texte en appelant la valeur correspondant à la chaîne dans la table de hachage. Le nombre de fois :

size_t count = word_map["target_string"];
Copier après la connexion

Le code complet est le suivant :

#include 
#include 
#include 
#include 

const size_t MAP_SIZE = 1024;

size_t hash_func(const std::string& str) {
    size_t hash_val = 0;
    for (char c : str) {
        hash_val += static_cast<size_t>(c);
    }
    return hash_val % MAP_SIZE;
}

int main() {
    std::vector words {"hello", "world", "hello", "c++", "hash", "world", "world"};
    std::unordered_map word_map;

    for (std::string word : words) {
        if (word_map.find(word) == word_map.end()) {
            word_map[word] = 1;
        } else {
            ++word_map[word];
        }
    }

    size_t count = word_map["world"];
    std::cout << "The word 'world' appears " << count << " times." << std::endl;

    return 0;
}
Copier après la connexion

Avec le code ci-dessus, on peut utiliser une table de hachage pour compter rapidement le nombre de fois qu'une chaîne apparaît dans un texte. L'utilisation de tables de hachage peut améliorer les performances de recherche, ce qui est plus évident pour de grandes quantités de données. Elle offre également une grande flexibilité et évolutivité dans les applications pratiques.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!