C++哈希表(hash table)是一种数据结构,用于存储和查找键值对。它是由一个哈希函数和一个数组组成的。哈希函数将键映射到数组中的一个位置,这个位置就是键值对应的索引。哈希表的主要特点包括:
综上所述,unordered_map 适用于需要快速查找和插入元素,且不要求元素存储顺序的场景,尤其适合使用自定义类型作为键的情况。但是需要注意的是,由于哈希表的原因,unordered_map 并不支持 lower_bound 和 upper_bound 等操作,因此在需要按照键的大小顺序查找元素时,可以考虑使用 map。
综上所述,unordered_map 和 unordered_set 的主要区别在于存储的元素类型和元素的唯一性。如果需要存储键值对且每个键只能对应一个值,则应该使用 unordered_map;如果只需要存储键且每个键只能出现一次,则应该使用 unordered_set。同时,由于它们都是使用哈希表实现的,因此在访问速度上也具有相似的优势。
在C++标准库中,unordered_set是一个使用哈希表实现的集合(set)容器,用于存储唯一的元素,且元素的存储没有特定的顺序。unordered_set使用哈希函数来将元素映射到桶中,不同的元素可能映射到同一个桶中,但是这些元素的哈希值不同。
std::unordered_set<int> myset;
myset.insert(3);
myset.insert(1);
myset.insert(7);
std::unordered_set<int> myset = {1, 2, 3};
auto it = myset.find(2);
if (it != myset.end())
std::cout << "Element found in unordered_set: " << *it << std::endl;
else
std::cout << "Element not found in unordered_set" << std::endl;
std::unordered_set<int> myset = {1, 2, 3};
myset.erase(2);
std::unordered_set<int> myset = {1, 2, 3};
std::cout << "unordered_set size: " << myset.size() << std::endl;
std::unordered_set<int> myset;
if (myset.empty())
std::cout << "unordered_set is empty" << std::endl;
else
std::cout << "unordered_set is not empty" << std::endl;
std::unordered_set<int> myset = {1, 2, 3};
myset.clear();
这些函数是unordered_set中最常用的一些函数。除此之外,还有一些其他的函数,如bucket(),load_factor()和max_load_factor()等,它们用于查询哈希表的桶的数量、负载因子和最大负载因子等信息。
unordered_map<int, string> map;
map.insert(make_pair(1, "one"));
map.insert({2, "two"});
map.insert(map.end(), {3, "three"});
unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};
auto it = map.find(2);
if (it != map.end()) {
cout << "Found " << it->second << endl;
}
unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};
map.erase(2);
unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};
cout << "Size of map: " << map.size() << endl;
unordered_map<int, string> map;
if (map.empty()) {
cout << "Map is empty" << endl;
}
unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};
map.clear();
除此之外,unordered_map 还支持其他的一些函数和操作,如 unordered_map::count()、unordered_map::operator[] 等。具体用法可以查阅 C++ STL 文档。