C++基础知识4:unordered_set

本文目的

简单的介绍一下unordered在不同地方使用的作用,在全局,在函数,在类里面的使用,以及相关应用举例

前置与关联知识点

  1. 哈希表
  2. 容器

unordered_set简介

C++11之后新增的无序容器
参考《Primer C++》11.4无序容器 p394

关键字类型没有明显顺序关系的时候,使用无序容器是非常有用的
unordered_set属于无序关联容器

unordered_set实现原理

参考《Primer C++》11.4无序容器 p394

使用了一个哈希函数和关键字类型的==运算符来进行元素的比较,这里不详细说解法

unordered_set使用方式

同关联容器的使用方式
参考《Primer C++》11.3关联容器操作 p381

unordered_set查找元素

  1. count,查找元素是否存在
    unordered_set<int> uset = {0,1,2,3,4};
    cout<<uset.count(1); //返回1
    cout<<uset.count(11); //返回0
    
  2. find返回元素迭代器,如元素不存在则返回uset.end()
    unordered_set<int> uset = {0,1,2,3,4};
    cout<<uset.find(1); //返回1对应的迭代器
    cout<<uset.count(11); //返回uset.end()
    

unordered_set添加和删除元素

  1. 添加元素
    ps:插入一个已存在的元素对容器没有任何影响
    unordered_set<int> uset;
    uset.insert(1);//插入单个元素
    uset.insert({1,2,3,4,5,6,1});//插入多个元素
    
  2. 删除一个已有的元素
    unordered_set<int> uset;
    uset.insert({1,2,3,4,5,6,2});//插入多个元素
    uset.count(2); //返回1
    uset.erase(2); //删除元素
    uset.count(2); //返回0
    

遍历unordered_set

参考chatgpt

  • 第一种方式:通过获取迭代器,迭代器自增的方式进行
#include <iostream>
#include <unordered_set>
int main() {
    // 创建一个unordered_set
    std::unordered_set<int> mySet = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    // 遍历unordered_set
    for (auto it = mySet.begin(); it != mySet.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}

  • 第二种方式:通过获取迭代器,迭代器自增的方式进行
#include <iostream>
#include <unordered_set>
int main() {
    // 创建一个unordered_set
    std::unordered_set<int> mySet = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    // 遍历unordered_set
    // 或者使用范围循环(C++11及以后版本)
    for (const auto &element : mySet) {
    	std::cout << element << " ";
    }
    return 0;
}

5. 其他

如有则补充

参考文献

《Primer C++》11.3关联容器操作 p381
《Primer C++》11.4无序容器 p394
chatgpt生成部分代码

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值