C++中的STL基础复习——unordered_set和set

STL——unordered_set

  1. unordered_set基于哈希表,是无序的,是一个无序的容器
  2. 头文件
#include<unordered_set>
  1. 定义以及常用的操作
    定义:
unordered_set<int> set;
  1. 迭代器操作:
    begin返回unordered_set第一个元素的迭代器
    end返回unordered_set最后一个元素下一个位置的迭代器

  2. 常见操作:
    bool empty() const检测unordered_set是否为空
    insert向容器中插入键值对
    erase删除容器中的键值对
    iterator find(const key_type& k)返回k在哈希桶中的位置
    size_t count(const key_type& k)返回哈希桶中关键码为k的键值对的个数
    size_t size() const获取unordered_set的有效元素个数

比如这里的m其实就是我定义的一个unordered_set,它里边的内容如下:

vector<string> wordDict(2);
wordDict[0] = "apple";
wordDict[1] = "pen";
unordered_set<string> m(wordDict.begin(), wordDict.end());//定义容器m里装着字典里的内容

键为0时值为apple;键为1时值为pen。
在这里插入图片描述
6. 一些常用操作的例子:

//定义unordered_set
unordered_set<int> set;
//向容器里插入值
for (int i=0; i<list.size(); i++)
{
    set.insert(list[i]);
}
//遍历着输出无序容器里的值
for (unordered_set<int>::iterator i = set.begin(); i != set.end(); i++) 
{
    cout << *i << endl;
}
//找出容器里第39个位置的值
cout << " find 39: " << *set.find(39) << endl;
//统计容器里值为5的个数
cout << "count 14:" << set.count(5) << endl;

STL——set

  1. set是STL中的标准关联容器
    set实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
    作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。
    跟unordered_set也太像了。
  2. 头文件
#include<set>
  1. 定义以及常用的操作
    定义:
set<int> s;
  1. 常用操作:

begin()    ,返回set容器的第一个元素

end()      ,返回set容器的最后一个元素

clear()    ,删除set容器中的所有的元素

empty()    ,判断set容器是否为空

max_size()   ,返回set容器可能包含的元素最大个数

size()      ,返回当前set容器中的元素个数

count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了 判断某一键值是否在set出现过了。

关于这个STL(Standard Template Library)标准模板库

  1. 这个库里边封装了许多复杂的数据结构算法和大量常用的数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。

  2. 其实也就是存了很多常用不常用的已经造好的轮子

  3. 从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术

  4. 如果,有的时候,你需要在程序中用到堆、栈、队列、链表等一些基本的算法,而你又实在不想自己去实现数据结构教科书中那些繁琐的算法,那么你就可以考虑使用STL。

  5. 红黑树的底层实现就是set和map。

了解下红黑树:
红黑树在二叉查找树的基础上还必须满足以下着色规则:
每个节点不是红色就是黑色
根节点为黑色
如果节点为红,其子节点必须为黑(一条路径上不能出现连续的两个红色节点)
任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同

  1. 很常用的有vector,string,stack,queue,set,unordered_set,map等。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值