set以及使用举例--C++基础

简介: set以及使用举例--C++基础

关联式容器:

set和map的底层实现都是RB-tree又称红黑树,而set和map又都是关联式容器,所谓关联式容器,就是每个元素都有一个key和一个value,而对于set来说,它的key就是它的value。所以set不允许两个元素有相同的key,所有元素都会根据key值自动被排序。


迭代器指向的值不允许被修改,因为set容器中的值都是关联起来的,如果改变某一处的值,也许会改变整个布局,所以改变迭代器指针处的值不被允许。


示例程序:

#include"Test.h"
#include<set>
#include<algorithm>//为了使用find、sort等方法
void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  set<int> v1;
  v1.insert(2);
  v1.insert(6);
  v1.insert(5);
  v1.insert(3);
  v1.insert(7);
  v1.insert(4);//插入自动排序
  v1.insert(4);//自动去重
  int v7 = v1.count(4);//这个值要么1,要么0
  v1.erase(5);//直接删除元素
  v1.erase(v1.find(6));//删除迭代器所在位置的元素
  set<int>::iterator v2 = v1.find(2);
  //*v2 = 4;  表达式必须是可修改的左值
  for (set<int>::iterator v3 = v1.begin();
    v3 != v1.end();
    v3++)
  {
    cout << *v3 << endl;
  }
  v1.clear();
  getchar();
}

不管你以什么样的顺序插入,它内部都会自动按照升序排列。


image.png


image.png


image.png


我们还会见到multiset这个STL,那它又是什么意思呢?

multiset的特性以及用法与set完全相同,只不过是它允许key重复。

简单修改:

void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  multiset<int> v1;
  v1.insert(2);
  v1.insert(6);
  v1.insert(5);
  v1.insert(3);
  v1.insert(7);
  v1.insert(4);//插入自动排序
  v1.insert(4);//不会自动去重
  int v7 = v1.count(4);//这个时候,它就有可能大于1了
  v1.erase(5);//直接删除元素
  v1.erase(v1.find(6));//删除迭代器所在位置的元素
  set<int>::iterator v2 = v1.find(2);
  //*v2 = 4;  表达式必须是可修改的左值
  for (set<int>::iterator v3 = v1.begin();
    v3 != v1.end();
    v3++)
  {
    cout << *v3 << endl;
  }
  v1.clear();
  getchar();
}

image.png


“Don’t let fear stop you from doing the thing you love.”

参考书籍:

《STL源码剖析》


目录
相关文章
|
1月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
31 3
【C++】map、set基本用法
|
1月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
23 5
|
1月前
|
存储 C++ 容器
【C++】set模拟实现
C++中的`set`是STL提供的一种关联容器,用于存储唯一元素并自动按特定顺序(默认升序)排序。其内部通过红黑树实现,保证了高效的插入、删除和查找操作,时间复杂度均为O(log n)。`set`支持迭代器遍历,提供了良好的数据访问接口。
36 3
|
5月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
44 2
|
5月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
69 2
|
5月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
54 2
|
5月前
|
存储 C++ 容器
|
5月前
|
存储 C++ 容器
【C++】开散列实现unordered_map与unordered_set的封装
【C++】开散列实现unordered_map与unordered_set的封装
61 0
|
5月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
76 0
|
6月前
|
C++
【c++】map和set的封装
【c++】map和set的封装
57 0