Les conflits de hachage STL C++ sont traités des manières suivantes : Méthode d'adresse de chaîne : utilisez des listes chaînées pour stocker les éléments en conflit, ce qui a une bonne applicabilité. Méthode d'adressage ouverte : recherchez les emplacements disponibles dans le compartiment pour stocker les éléments. Les sous-méthodes sont : Détection linéaire : recherchez l'emplacement disponible suivant dans l'ordre. Détection quadratique : recherche en sautant des positions sous forme quadratique.
Lors de l'utilisation des tables de hachage de la bibliothèque de modèles standard C++ (STL), les collisions sont inévitables car plusieurs clés peuvent être hachées dans le même compartiment. Pour gérer les conflits, STL propose les méthodes suivantes :
La méthode d'adresse en chaîne utilise une liste chaînée pour stocker les éléments hachés dans le même compartiment. Lorsqu'un conflit se produit, un nouveau nœud de liste chaînée est créé et l'élément est ajouté à la liste chaînée. Il s’agit de la méthode de gestion des collisions la plus couramment utilisée car elle gère bien les tables de hachage denses.
#include <unordered_map> #include <list> int main() { std::unordered_map<int, std::list<int>> hash_table; hash_table[10].push_back(100); hash_table[10].push_back(200); // 迭代哈希到 10 的键 for (auto& item : hash_table[10]) { std::cout << item << " "; // 输出 100 200 } return 0; }
La méthode d'adressage ouverte ne créera pas de nouveaux nœuds en cas de conflit. Au lieu de cela, il recherche le prochain emplacement disponible dans le compartiment pour stocker l'élément. Il existe plusieurs méthodes d'adressage ouvertes, les plus courantes étant le sondage linéaire et le sondage quadratique.
Sonde linéaire :
#include <unordered_map> int main() { std::unordered_map<int, int> hash_table; hash_table[10] = 100; // 插入 (10, 100) hash_table[10] = 200; // 更新 (10, 200) // 访问更新后的值 std::cout << hash_table[10] << std::endl; // 输出 200 return 0; }
Sonde quadratique :
#include <unordered_map> int main() { std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, QuadraticProbing<int, int>> hash_table; hash_table[10] = 100; // 插入 (10, 100) hash_table[10] = 200; // 更新 (10, 200) // 访问更新后的值 std::cout << hash_table[10] << std::endl; // 输出 200 return 0; }
La méthode de gestion des collisions choisie dépend du facteur de charge attendu de la table de hachage. La méthode d'adressage en chaîne est généralement plus adaptée aux tables de hachage denses, tandis que la méthode d'adressage ouverte est plus adaptée aux tables de hachage clairsemées.
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!