unordered_map(c++)
unordered_map(c++)
std::unordered_map
是 C++ 标准库中提供的一个哈希表容器,具有快速的查找、插入和删除操作。它存储键值对,并且支持基于哈希函数的快速查找,适合用于不需要顺序访问的场景。
常用方法及其详细讲解:
1. insert
功能: 向
unordered_map
中插入一个新的键值对。语法:
1
2unordered_map[key] = value; // 直接插入
unordered_map.insert({key, value}); // 另一种插入方式返回值:
- 如果使用
insert
,它会返回一个pair<iterator, bool>
,其中iterator
指向插入的元素,bool
表示插入是否成功(如果键已存在则为false
)。
- 如果使用
示例:
1
2
3std::unordered_map<int, std::string> umap;
umap.insert({1, "apple"});
umap[2] = "banana";
2. find
功能: 查找
unordered_map
中指定键的元素。如果元素存在,返回指向该元素的迭代器;否则,返回end()
。语法:
1
iterator find(const key_type& key);
返回值: 返回一个迭代器。如果键不存在,返回
end()
。示例:
1
2
3
4
5std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
auto it = umap.find(2);
if (it != umap.end()) {
std::cout << "Found: " << it->second << std::endl; // 输出: Found: banana
}
3. erase
功能: 删除
unordered_map
中指定键的元素。语法:
1
2
3void erase(const key_type& key); // 删除指定键的元素
void erase(iterator pos); // 删除指定位置的元素
void erase(iterator first, iterator last); // 删除指定范围的元素示例:
1
2std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
umap.erase(2); // 删除键为 2 的元素
4. count
功能: 判断指定键是否存在。如果元素存在,返回 1;否则返回 0。
语法:
1
size_t count(const key_type& key) const;
示例:
1
2
3std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
std::cout << umap.count(1) << std::endl; // 输出: 1
std::cout << umap.count(3) << std::endl; // 输出: 0
5. size
功能: 返回
unordered_map
中元素的数量。语法:
1
size_t size() const;
示例:
1
2std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
std::cout << umap.size() << std::endl; // 输出: 2
6. empty
功能: 判断
unordered_map
是否为空。语法:
1
bool empty() const;
示例:
1
2std::unordered_map<int, std::string> umap;
std::cout << umap.empty() << std::endl; // 输出: 1 (true)
7. clear
功能: 清空
unordered_map
中的所有元素。语法:
1
void clear();
示例:
1
2
3std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
umap.clear();
std::cout << umap.size() << std::endl; // 输出: 0
8. bucket_count
功能: 返回哈希表中的桶的数量。哈希表将元素分配到不同的桶中,这个方法可以用来获取桶的数量。
语法:
1
size_t bucket_count() const;
示例:
1
2std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
std::cout << umap.bucket_count() << std::endl;
9. bucket
功能: 返回指定键对应的桶的索引。
语法:
1
size_t bucket(const key_type& key) const;
示例:
1
2std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
std::cout << umap.bucket(1) << std::endl;
10. rehash
功能: 手动调整哈希表的桶大小,以优化性能(可以用于控制哈希表的负载因子)。
语法:
1
void rehash(size_t n); // 将桶的数量调整为至少 n
示例:
1
2std::unordered_map<int, std::string> umap;
umap.rehash(10); // 调整哈希表的桶数量至 10
11. load_factor
功能: 返回当前哈希表的负载因子,负载因子是元素数量与桶数量之比。
语法:
1
float load_factor() const;
示例:
1
2std::unordered_map<int, std::string> umap = {{1, "apple"}, {2, "banana"}};
std::cout << umap.load_factor() << std::endl;
总结
- 查找元素: 使用
find
来查找元素,返回迭代器。 - 插入元素: 使用
insert
或者operator[]
来插入新元素。 - 删除元素: 使用
erase
来删除特定键的元素,或者使用clear
来清空所有元素。 - 其他操作:
count
判断元素是否存在,size
获取元素数量,empty
判断容器是否为空。
unordered_map
适用于需要快速查找而不关心元素顺序的场景,它提供了高效的查找和插入性能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 寻觅~流光!
评论