美文网首页
C++ STL 集合类常用记录

C++ STL 集合类常用记录

作者: random_walk | 来源:发表于2021-05-21 21:37 被阅读0次

STL中关于集合的容器主要是setmultisetunordered_setunordered_multiset四者,后两者是c++11开始引入的,其主要区别可以如下表所示

set multiset unordered_set
模板原型 template<class Key, class Compare = [std::less]<Key>, class Allocator = [std::allocator]<Key>> class set; template < class T, class Compare = less<T>, class Alloc = allocator<T> > > class multiset; template < class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<Key> > class unordered_set;
简介 在容器中快速查找键,无重复 同前,有重复 快速查找 ,无重复
头文件 <set> <set> <unordered_set>
底层实现 红黑树 红黑树 哈希表
顺序 有序,默认升序 同前 无序
查找 O(\log(n)) 同前 平均O(1),最差O(n)
插入 O(\log(n)) 同前 平均O(1),最差O(n)
删除 O(\log(n)) 同前 平均O(1),最差O(n)

初始化

unordered_set<int> s1 
unordered_set<int> s2 {1, 2, 3}
set<string> s3 {"abcc", "123"}
unordered_set<string> s4(s3.begin(), s3.end());
set<string, greater<> > s;

常用方法

几者使用方式很类似。

  • 插入:insert(),支持单个元素和范围
  • 查找:find(),返回指向元素的迭代器,如果没有找到返回end()
  • 删除:erase(),删除指定key或者迭代器指向的key或范围
  • 清空:clear(),清空set
  • 空否:empty()
    set支持的其他方法
  • 统计个数:count()
  • set.lower_bound(x) / upper_bound(x)s.lower_bound(x) 表示查找 >= x 的元素中最小的一个,并返回指向该元素的迭代器,s.upper_bound(x) 表示查找 >x 的元素中最小的一个,并返回指向该元素的迭代器
  • 其他结构,可以通过重载<
bool operator <(const node &ai,const node &bi)
{
    return ai.x > bi.x;
} 

其他注意事项

unordered_set不能用来保存pair,但是set可以。如果需要用unordered_set保存其他结构,需要自己手写hash方法。

相关文章

  • C++ STL 集合类常用记录

    STL中关于集合的容器主要是set,multiset,unordered_set和unordered_multis...

  • C++STL整理

    C++ STL中最基本以及最常用的类或容器string、vector、set、list、map string 处理...

  • 2018-10-27

    常用的4种C++组件: 类(class),集合和容器(collection and container),类库(c...

  • 集合的转换-C++

    集合的转换 C++ STL集合的互相转换 1、遍历 for each的特性介绍 Example: 2、std::t...

  • leetcode刷题02--求链表交点--T160

    题目: 思路一:可以使用c++自带的stl库中的set集合来进行查找知识补充:stl中set的使用: 其实set就...

  • STL学习

    title: STL学习date: 2018-11-23 19:49:39 0. 前言 STL是C++中的一个类库...

  • 读书笔记17.06.03

    C++ STL:Listlist是C++标准模版库(STL,Standard Template Library)中...

  • STL容器 算法 迭代器 适配器

    STL包括容器,算法和迭代器 STL的模板类为c++提供了完善的数据结构,它的模板类的样式就好象数据结构中用类c或...

  • [C++] STL 容器

    参考:[C++] STL 容器 (一) - 基本介紹[C++] STL 容器 (二) - Iterator 部分示例:

  • 第二章 C++ STL 泛型编程 1

    一、STL 概述 STL——C++标准模板库,定义了常用的数据结构和算法。提供三种类型的组件:容器、迭代器和算法。...

网友评论

      本文标题:C++ STL 集合类常用记录

      本文链接:https://www.haomeiwen.com/subject/jufgjltx.html