c++ unordered_set 弱序排序
时间: 2023-12-10 22:46:56 浏览: 30
C++的`std::unordered_set`是基于哈希表实现的,它不会保持插入元素的顺序。因为`unordered_set`使用哈希函数对元素进行分布,使得元素在哈希表中的存储位置是无序的。所以,`unordered_set`的元素插入后是无序的,没有弱序排序的概念。
如果需要有序的集合,可以考虑使用`std::set`或`std::multiset`,它们是基于红黑树实现的有序集合容器。这些容器会根据元素的值进行自动排序,以保持有序性。
相关问题
c++ unordered_set原理
unordered_set是一种使用hash散列的容器,其内部使用hash值作为key来存储数据。其原理是通过计算加入到unordered_set的新值的hash值,然后计算hash值对桶的数量取模得到对应的桶,将新值加入到该桶中。如果桶中已经有元素,则将新值链接在后面。当元素数量达到一定数量时,需要扩充桶的数量并重新构建桶的结构。unordered_set中的元素没有按照任何特定的顺序排序,而是根据它们的散列值组织成桶,这样可以通过值直接快速访问单个元素。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [unordered_set](https://blog.csdn.net/m0_51548759/article/details/128555452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
c++ set unordered_set
C++中除了set之外,还有另一个容器叫做unordered_set。unordered_set也是一种存储一组唯一元素的容器,但它不会对元素进行排序。相比于set,unordered_set的插入、删除和查找操作的平均时间复杂度是常数时间O(1),而不是对数时间O(log n)。unordered_set是基于哈希表实现的。
你可以使用#include <unordered_set>头文件来包含unordered_set的定义。然后可以使用unordered_set<T>来声明一个特定类型T的unordered_set对象,其中T是你想要存储的元素类型。
以下是一些常用的unordered_set操作:
1. 插入元素:使用insert()函数向unordered_set中插入元素。如果插入成功,则返回一个pair对象,其中pair.first是一个迭代器指向插入的元素位置,pair.second为true;如果元素已经存在,则不会进行插入,pair.second为false。
2. 删除元素:使用erase()函数从unordered_set中删除指定元素。你可以传递一个元素值或迭代器作为参数。
3. 查找元素:使用find()函数来查找一个元素,返回一个迭代器指向该元素。如果元素不存在,则返回unordered_set的end()迭代器。
4. 遍历元素:你可以使用迭代器循环遍历unordered_set中的所有元素。
5. 获取大小:使用size()函数获取unordered_set中元素的数量。
下面是一个简单的例子,演示了如何使用unordered_set:
```cpp
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
mySet.insert(20); // 重复插入,不会生效
// 遍历元素
for (const auto& element : mySet) {
std::cout << element << " ";