C++哈希的概念及STL中有关哈希容器的使用
作者:野牛程序员:2024-07-02 11:43:45 C++阅读 2319
C++哈希的概念及STL中有关哈希容器的使用
哈希(Hash)是计算机科学中一种高效的数据存储和检索技术。哈希函数将输入的数据映射到一个固定范围的值,通过这个值可以快速定位数据。哈希表(Hash Table)是一种基于哈希函数的数据结构,可以在平均情况下实现常数时间的查找、插入和删除操作。
在C++的标准模板库(STL)中,哈希容器主要包括std::unordered_map
和std::unordered_set
。
std::unordered_map
std::unordered_map
是一个基于哈希表实现的关联容器,用于存储键值对。每个键都唯一且与一个值相关联,可以通过键快速检索对应的值。
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, std::string> umap; // 插入元素 umap[1] = "one"; umap[2] = "two"; umap[3] = "three"; // 访问元素 std::cout << "Key 1: " << umap[1] << std::endl; // 遍历 for (const auto& pair : umap) { std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; } // 查找元素 auto it = umap.find(2); if (it != umap.end()) { std::cout << "Found: " << it->first << " -> " << it->second << std::endl; } else { std::cout << "Not found" << std::endl; } return 0; }
std::unordered_set
std::unordered_set
是一个基于哈希表实现的集合容器,用于存储唯一的元素,提供高效的插入、删除和查找操作。
#include <iostream> #include <unordered_set> int main() { std::unordered_set<int> uset; // 插入元素 uset.insert(1); uset.insert(2); uset.insert(3); // 检查元素是否存在 if (uset.find(2) != uset.end()) { std::cout << "2 is in the set" << std::endl; } else { std::cout << "2 is not in the set" << std::endl; } // 遍历 for (const auto& elem : uset) { std::cout << elem << std::endl; } // 删除元素 uset.erase(2); return 0; }
哈希容器的特点
快速访问:哈希容器的主要优势在于快速访问,可以在常数时间内完成插入、删除和查找操作。
无序存储:与有序容器(如
std::map
和std::set
)不同,哈希容器不维护元素的顺序。负载因子和重新哈希:当哈希表中的元素数量超过一定阈值时,表会自动重新哈希(rehash),以保持高效的操作性能。
哈希容器在需要快速查找的场景中非常有用,但由于内部结构的无序性,对于需要排序或顺序访问的场景,其他有序容器可能更为适合。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
- 上一篇:C++中的max函数:用法、技巧与注意事项
- 下一篇:C++探索智能指针的设计原理