c++中unrodered_map与unordered_set的基本使用

unordered_map

在C++中,std::unordered_map 是一个无序关联容器,它包含可以重复的键-值对组合,但每个键在容器中必须是唯一的。与std::map不同,std::unordered_map不按照键的排序顺序存储元素,而是使用哈希表来存储元素,从而提供了常数时间复杂度的平均查找、插入和删除操作。

以下是一些std::unordered_map的常用成员函数及其用法:

  1. 构造函数和析构函数

    • 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(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回unordered_map中元素的数量。
    • bool empty() const noexcept: 如果unordered_map为空,则返回true
  3. 插入和删除

    • 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: 删除所有元素。
  4. 查找和访问

    • 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异常。
  5. 迭代器

    • std::unordered_set类似,std::unordered_map也提供了一系列迭代器函数来遍历容器中的元素。
  6. 哈希策略

    • 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 的常用成员函数及其用法:

  1. 构造函数和析构函数

    • 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(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回 unordered_set 中元素的数量。
    • bool empty() const noexcept: 如果 unordered_set 为空,则返回 true
  3. 插入和删除

    • 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: 删除所有元素。
  4. 查找

    • iterator find(const key_type& key): 查找键为 key 的元素。如果找到,则返回指向该元素的迭代器;否则返回 end()
    • size_type count(const key_type& key) const noexcept: 返回键为 key 的元素的数量(对于 unordered_set,这总是0或1)。
  5. 迭代器

    • 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: 同上,但返回常量反向迭代器。
  6. 哈希策略

    • 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++标准库文档或相关书籍。

相关推荐

  1. c++mapset基本使用

    2024-05-11 22:16:01       11 阅读
  2. c++unrodered_mapunordered_set基本使用

    2024-05-11 22:16:01       12 阅读
  3. C++STL——stack类基本使用

    2024-05-11 22:16:01       15 阅读
  4. C++STL——queue类基本使用

    2024-05-11 22:16:01       10 阅读
  5. c/c++ qsort bsearch 算法使用

    2024-05-11 22:16:01       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 22:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 22:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 22:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 22:16:01       20 阅读

热门阅读

  1. 基于Seata实现分布式事务实现

    2024-05-11 22:16:01       11 阅读
  2. ffmpeg 7.0 + vs2022 +windows编译

    2024-05-11 22:16:01       15 阅读
  3. Idea 核心编程快捷键-简洁版

    2024-05-11 22:16:01       12 阅读
  4. 嵌入式复习提纲

    2024-05-11 22:16:01       12 阅读
  5. 学习笔记:IEEE 1003.13-2003【POSIX PSE53接口列表】

    2024-05-11 22:16:01       13 阅读
  6. Python图形界面(GUI)Tkinter笔记(目录)

    2024-05-11 22:16:01       14 阅读