【C++】unordered_set

73 阅读1分钟

C++中 : unordered_set 的 find(), end(), erase() 函数的用法

背景

1.unordered_set 是 C++ 标准库中的无序容器,用于存储一组不重复的元素。 2.unordered_set 容器底层使用哈希表实现,因此元素的顺序是无序的。

以下是 unordered_setfind()end()erase() 函数的用法说明:

find()

  • 函数原型
    iterator find(const key_type& key);
    const_iterator find(const key_type& key) const;
  • find() 函数用于查找 unordered_set 容器中是否存在指定的键值,

    • 如果存在,则返回指向该元素的迭代器,
    • 否则返回 end()
  • 例如,可以使用以下代码查找 unordered_set 容器 s 中是否存在键值为 5 的元素:

std::unordered_set<int> s{1, 2, 3, 4, 5};
auto it = s.find(5);
if (it != s.end()) {
    std::cout << "Element found: " << *it << std::endl;
} else {
    std::cout << "Element not found" << std::endl;
}
  • 在这个示例中,s.find(5) 查找 unordered_set 容器 s 中是否存在键值为 5 的元素,* 如果存在,则返回指向该元素的迭代器,
  • 否则返回 s.end()。如果找到了该元素,则打印出它的值;
  • 否则打印出“Element not found”。

end()

  • 函数原型
iterator end() noexcept;
const_iterator end() const noexcept;
  • end() 函数用于返回指向 unordered_set 容器中超出范围的迭代器,即指向最后一个元素之后的位置。由于 unordered_set 容器中的元素顺序是无序的,因此 end() 函数返回的迭代器不一定是最大的元素。

  • 例如,可以使用以下代码获取 unordered_set 容器 send() 迭代器:

std::unordered_set<int> s{1, 2, 3, 4, 5};
auto it = s.end();
std::cout << "End iterator: " << *it << std::endl;

在这个示例中,s.end() 返回指向 unordered_set 容器 s 中超出范围的迭代器,即指向最后一个元素之后的位置,然后使用 *it 获取迭代器指向的值。

  • 由于 end() 函数返回的迭代器不指向任何元素,因此这个示例会输出一段未定义的值。

erase()

  • 函数原型
size_type erase(const key_type& key);
iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
  • erase() 函数用于删除 unordered_set 容器中指定的元素或范围内的元素。

    • 如果删除的元素不存在,则返回 0
    • 否则返回删除的元素个数。
  • 例如,可以使用以下代码删除 unordered_set 容器 s 中的键值为 3 的元素:

std::unordered_set<int> s{1, 2, 3, 4, 5};
auto n = s.erase(3);
std::cout << "Erased " << n << " elements" << std::endl;
  • 在这个示例中,s.erase(3) 删除 unordered_set 容器 s 中键值为 3 的元素,然后返回删除的元素个数。
  • 因为容器中存在键值为 3 的元素,所以返回值为 1,表示成功删除了一个元素。