C++中 : unordered_set 的 find(), end(), erase() 函数的用法
背景
1.unordered_set
是 C++ 标准库中的无序容器,用于存储一组不重复的元素。
2.unordered_set
容器底层使用哈希表实现,因此元素的顺序是无序的。
以下是 unordered_set
的 find()
、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
容器s
的end()
迭代器:
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,表示成功删除了一个元素。