unordered_map
在C++中,std::unordered_map 是一个无序关联容器,它包含可以重复的键-值对组合,但每个键在容器中必须是唯一的。与std::map不同,std::unordered_map不按照键的排序顺序存储元素,而是使用哈希表来存储元素,从而提供了常数时间复杂度的平均查找、插入和删除操作。
以下是一些std::unordered_map的常用成员函数及其用法:
-
构造函数和析构函数
unordered_map(): 默认构造函数,创建一个空的unordered_map。unordered_map(size_type n): 创建一个具有n个桶的unordered_map。unordered_map(size_type n, const hasher& hf): 创建一个具有n个桶并使用给定哈希函数的unordered_map。unordered_map(size_type n, const hasher& hf, const key_equal& eql): 创建一个具有n个桶、给定哈希函数和键相等函数的unordered_map。unordered_map(const unordered_map& other): 拷贝构造函数。~unordered_map(): 析构函数。
-
大小操作
size_type size() const noexcept: 返回unordered_map中元素的数量。bool empty() const noexcept: 如果unordered_map为空,则返回true。
-
插入和删除
pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果键已存在,则不插入新值(保留旧值),并返回表示该键已经存在的pair(迭代器指向已存在的元素,bool值为false)。如果键不存在,则插入新元素,并返回表示插入成功的pair(迭代器指向新插入的元素,bool值为true)。iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素(但位置只是提示,实际插入位置可能不同)。iterator erase(const_iterator position): 删除指定位置的元素。size_type erase(const key_type& key): 删除键为key的元素(如果存在),并返回被删除的元素数量(0或1)。iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。void clear() noexcept: 删除所有元素。
-
查找和访问
iterator find(const key_type& key): 查找键为key的元素。如果找到,则返回指向该元素的迭代器;否则返回end()。const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。size_type count(const key_type& key) const noexcept: 返回键为key的元素的数量(对于unordered_map,这总是0或1)。mapped_type& operator[](const key_type& key): 访问或插入具有指定键的元素。如果键不存在,则插入新元素并为其分配默认值。返回与键关联的值的引用。mapped_type& at(const key_type& key): 访问键为key的元素的值。如果键不存在,则抛出std::out_of_range异常。
-
迭代器
- 与
std::unordered_set类似,std::unordered_map也提供了一系列迭代器函数来遍历容器中的元素。
- 与
-
哈希策略
hasher hash_function() const: 返回用于哈希键的函数对象。key_equal key_eq() const: 返回用于比较键的函数对象。size_type bucket_count() const noexcept: 返回容器中的桶数。size_type max_bucket_count() const noexcept: 返回容器可以拥有的最大桶数。size_type bucket_size(size_type n) const: 返回第n个桶中的元素数量。size_type bucket(const key_type& key) const: 返回键key所在的桶的索引。
这只是std::unordered_map的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。
unordered_set
在C++中,std::unordered_set 是一个无序关联容器,它包含唯一元素。与 std::set 不同,std::unordered_set 不保证元素之间的任何特定顺序;元素的顺序可能会随着元素的插入和删除而改变。std::unordered_set 通常使用哈希表实现,因此查找、插入和删除操作的平均时间复杂度是 O(1)。
以下是一些 std::unordered_set 的常用成员函数及其用法:
-
构造函数和析构函数
unordered_set(): 默认构造函数,创建一个空的unordered_set。unordered_set(size_type n): 创建一个具有n个桶的unordered_set。unordered_set(size_type n, const hasher& hf): 创建一个具有n个桶并使用给定哈希函数的unordered_set。unordered_set(size_type n, const hasher& hf, const key_equal& eql): 创建一个具有n个桶、给定哈希函数和键相等函数的unordered_set。unordered_set(const unordered_set& other): 拷贝构造函数。~unordered_set(): 析构函数。
-
大小操作
size_type size() const noexcept: 返回unordered_set中元素的数量。bool empty() const noexcept: 如果unordered_set为空,则返回true。
-
插入和删除
pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果元素已存在,则插入失败,并返回表示该元素已经存在的pair(迭代器指向已存在的元素,bool值为false)。如果元素不存在,则插入新元素,并返回表示插入成功的pair(迭代器指向新插入的元素,bool值为true)。iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素(但位置只是提示,实际插入位置可能不同)。iterator erase(const_iterator position): 删除指定位置的元素。size_type erase(const key_type& key): 删除键为key的元素(如果存在),并返回被删除的元素数量(0或1)。iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。void clear() noexcept: 删除所有元素。
-
查找
iterator find(const key_type& key): 查找键为key的元素。如果找到,则返回指向该元素的迭代器;否则返回end()。size_type count(const key_type& key) const noexcept: 返回键为key的元素的数量(对于unordered_set,这总是0或1)。
-
迭代器
iterator begin() noexcept: 返回指向第一个元素的迭代器。const_iterator begin() const noexcept: 同上,但返回常量迭代器。iterator end() noexcept: 返回指向容器“尾部之后”的迭代器。const_iterator end() const noexcept: 同上,但返回常量迭代器。reverse_iterator rbegin() noexcept: 返回指向最后一个元素的反向迭代器。const_reverse_iterator rbegin() const noexcept: 同上,但返回常量反向迭代器。reverse_iterator rend() noexcept: 返回指向“反向尾部之前”的反向迭代器。const_reverse_iterator rend() const noexcept: 同上,但返回常量反向迭代器。
-
哈希策略
hasher hash_function() const: 返回用于哈希键的函数对象。key_equal key_eq() const: 返回用于比较键的函数对象。size_type bucket_count() const noexcept: 返回容器中的桶数。size_type max_bucket_count() const noexcept: 返回容器可以拥有的最大桶数。size_type bucket_size(size_type n) const: 返回第n个桶中的元素数量。size_type bucket(const key_type& key) const: 返回键key所在的桶的索引。
这只是 std::unordered_set 的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。