当前位置: 首页 > news >正文

C++ STL之set和unordered_set

一.概述

set是一个关联容器,它存储了一组唯一的元素,并按照一定的顺序进行排序,并提供了高效的元素查找、插入和删除操作。而unordered_set与set的区别在于unordered_set是无序的

注:

  1. 在内部,元素不按任何特定顺序排序,元素放入哪个存储完全取决于其值的哈希值。这允许快速访问各个元素,因为一旦计算出哈希值,它就会引用该元素被放入的内存中。
  2. 不再以键值对的形式存储数据,而是直接存储数据的值
  3. 容器内部存储的各个元素的值都互不相等,且不能被修改,因为修改可能会更改元素的哈希值并损坏容器。

二. 初始化

2.1 头文件

#include <unordered_set>
#include <set>

2.2 函数声明

std::unordered_set<Key, Hash = std::hash<Key>, Pred = std::equal_to<Key>, Alloc = std::allocator<Key>>
// Key 是存储的元素类型。
// Hash 是一个函数或函数对象,用于生成元素的哈希值,默认为 std::hash<Key>。
// Pred 是一个二元谓词,用于比较两个元素是否相等,默认为 std::equal_to<Key>。
// Alloc 是分配器类型,用于管理内存分配,默认为 std::allocator<Key>。set<元素类型> 容器名;

2.3 初始化

unordered_set<int> mySet; //默认构造
unordered_set<int> mySet2(mySet1); //拷贝构造
unordered_set<int> mySet3(move(mySet2)); //移动构造
unordered_set<int> mySet4(set1.begin(), set1.end()); //迭代器构造
unordered_set<int> mySet5(num,num+10);    //数组构造
unordered_set<int> mySet6 {1,2,3,4};//赋值初始化

3.成员函数

成员函数功能
begin返回指向容器中第一个元素的正向迭代器。
cbegin和 begin() 功能相同,只不过其返回的是 const 类型的正向迭代器。
end返回指向容器中最后一个元素之后位置的正向迭代器。
cend和 end() 功能相同,只不过其返回的是 const 类型的正向迭代器。
empty若容器为空,则返回 true;否则 false。
size容器中元素个数。
max_size返回容器所能容纳元素的最大个数,依操作系统而定。
clear清空容器
insert插入元素或节点
insert_range插入一系列元素
emplace向容器中添加新元素,效率比 insert() 方法高。
emplace_hint向容器中添加新元素,效率比 insert() 方法高。
erase删除指定元素。
swap交换 2 个 unordered_set 容器存储的元素。
count在容器中查找值为 key 的元素的个数。
find查找以值为 key 的元素,若找到,则返回一个指向该元素的正向迭代器;反之,则返回一个指向容器中最后一个元素之后位置的迭代器。

四. 遍历

#include<iostream>
#include<unordered_set>using namespace std;int main(){unordered_set<string> mySet1 = {"one", "two", "three","four"};unordered_set<string> mySet2 = {"five", "six", "seven"};string str = "zero";// 使用迭代器遍历for(unordered_set<string>::iterator it = mySet1.begin(); it!=mySet1.end(); it++){cout<< *it << " ";}// 确定类型mySet1.insert(str); // 插入单个元素for(const string& x: mySet1){cout<< x << " ";}// 类型推导mySet1.insert(mySet2.begin(),mySet2.end()); // 使用范围迭代器插入for(const auto& x: mySet1){cout<< x << " ";}return 0;
}/*
output:
four three two one 
one two zero three four
seven one two six zero three five four
*/

参考:
https://en.cppreference.com/w/cpp/container/unordered_set
https://www.runoob.com/cplusplus/cpp-libs-unordered_set.html
https://m.biancheng.net/view/7250.html


http://www.mrgr.cn/news/24882.html

相关文章:

  • STM32点亮第一个LED
  • Redis 入门 - C#|.NET Core客户端库六种选择
  • 捕获和处理异常非常重要
  • STM32 + W5500 实现HTTPS !
  • Python习题 177:设计银行账户类并实现存取款功能
  • 基于ssm+vue+uniapp的食堂线上预约点餐系统小程序
  • QT QSystemTrayIcon创建系统托盘区图标
  • 2024年增强现实(AR)的现状
  • 每日一题:移动零
  • gdb调试64位程序错误
  • 每日OJ_牛客_合唱团(打家劫舍dp)
  • 【佳学基因检测】在EXCEL中,如何获取A列的第9-29个字符,将其填入另一列中
  • 【MySQL】表的操作【有关表结构的操作】【创建、查看、删除、修改表结构】
  • 【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类
  • 0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现
  • AVL树的模拟实现(插入,验证)
  • 计算机三级网络技术总结 第十一章网络管理技术
  • 「数学::质数」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
  • LJS送给WSW的生日礼物——happy birthday to my dear friend————(作者:LJS)
  • 速盾:cdn加速效果明显吗?