【C/C++】学习STL标准模板库 003 set | multiset 容器 快到碗里来(◕ᴗ◕✿)

今天的主题是什么?set容器!

  set集合概述

  •  set是按特定的顺序存储具有相同数据类型元素的容器。在set中不但每个元素的值都唯一,而且系统能根据元素的值自动排序(升序)
  • 注意,set中元素的值不可被修改,因为set容器不支持修改后自动重新进行排序(这样也就意味着一旦有值被修改,原来的有序性就会遭到破坏),所以要修改set中元素的值,本质上是先将其删除,然后再插入一个新的元素(插入后set又会重新排序)
  • 使用set要包含头文件【#include <set>】

  创建set集合

set<int> si; // 创建一个存储int类型数据的set
si.insert(6);si.insert(8);si.insert(3);
si.insert(4);si.insert(7);si.insert(1);
/// si实际存储顺序为 1 3 4 6 7 8
set<char> sc; // 创建一个存储char类型数据的set
set<int> sii(si); // 创建一个元素内容和si完全相同的set集合
printf("程序结束..\n");

 【set必知必会操作】

以下操作和vector一致,可查看此链接:

【C/C++】深入了解STL标准模板库 001概述+vector 快到碗里来(◕ᴗ◕✿)_BigXMeng的博客-CSDN博客

(1)begin() 和 end()

(2)rbegin() 和 rend()

(3)clear()

(4)empty()

(5)size()

find(elem) 在set中查找元素elem,如果成功找到,则返回指向该元素的双向迭代器;否则返回end()所返回的迭代器

set<int> si; // 创建一个存储int类型数据的set
si.insert(6);si.insert(8);si.insert(3);
/// si实际存储顺序为 3 6 8
set<int>::iterator it1 = si.find(6);
set<int>::iterator it2 = si.find(2);
set<int>::iterator it3 = si.end();
printf("程序结束..\n");

insert(elem) 在set中插入元素elem

erase(elem) 在set中删除元素elem

count(elem) 返回set中有多少个elem元素(由于set中元素都是唯一的,所以存在则返回1,不存在则返回0

lower_bound(elem) 返回一个指向容器中第一个大于等于elem的元素的迭代器

upper_bound(elem) 返回一个指向容器中第一个大于elem的元素的迭代器

multiset 概述

  • multiset是按特定顺序存储元素的容器,与set不同的是,multiset容器可以存储重复的元素。因为包含重复的元素,所以在插入、删除、查找元素上与set有差别。
  • 使用multiset容器需要包含头文件【#include <set>】

multiset 必知必会操作

创建multiset对象

multiset<int> ms1;              // 创建一个存储int类型数据的multiset
multiset<char> ms2;             // 创建一个存储char类型数据的multiset
multiset<double> ms3;           // 创建一个存储double类型数据的multiset
multiset<int> ms11{5,7,5,8};    // 实际存储顺序{5,5,7,8}
multiset<int> ms12(ms11);       // 创建一个和ms11有相同元素的multiset

 count(elem) 返回set中有多少个elem元素

multiset<int> ms1;
ms1.insert(2);
ms1.insert(2);
ms1.insert(2);
ms1.insert(6);
ms1.insert(6);
printf("%d\n", ms1.count(2)); // 3
printf("%d\n", ms1.count(6)); // 2

 lower_bound(elem) 返回一个指向容器中第一个大于等于elem的元素的迭代器

/**
 * Created By Liu Xianmeng On 2022/11/29
 */
#include <bits/stdc++.h>
using namespace std;
int main(){
    multiset<int> ms1;
    ms1.insert(2);
    ms1.insert(2);
    ms1.insert(2);
    ms1.insert(6);
    ms1.insert(6);
    multiset<int>::iterator it = ms1.lower_bound(3);
    for(; it != ms1.end(); ++it) printf("%d ", *it);
    printf("\n**********************************\n");
    multiset<int>::iterator it2 = ms1.upper_bound(3);
    for(; it2 != ms1.end(); ++it2) printf("%d ", *it2);
    return 0;
    /* 打印结果:
     * 6 6
     * **********************************
     * 6 6
     */
}

upper_bound(elem) 返回一个指向容器中第一个大于elem的元素的迭代器

/**
 * Created By Liu Xianmeng On 2022/11/29
 */
#include <bits/stdc++.h>
using namespace std;
int main(){
    multiset<int> ms1;
    ms1.insert(2);
    ms1.insert(2);
    ms1.insert(2);
    ms1.insert(6);
    ms1.insert(6);
    multiset<int>::iterator it = ms1.lower_bound(3);
    for(; it != ms1.end(); ++it) printf("%d ", *it);
    printf("\n**********************************\n");
    multiset<int>::iterator it2 = ms1.upper_bound(3);
    for(; it2 != ms1.end(); ++it2) printf("%d ", *it2);
    return 0;
    /* 打印结果:
     * 6 6
     * **********************************
     * 6 6
     */
}

erase(elem) 删除multiset中所有的elem元素

 insert(elem) 插入某一个元素elem

编程实战

后续gengxin...

 感谢读取~ >.<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值