当前位置: 首页 > article >正文

14-9-1C++STL的set容器

(一)set容器的基本概念
1. set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列,元素插入过程是按排序规则插入,所以不能指定插入位置
2. set深用红黑树变体的数据结构实现,红黑树属于平衡二叉树,在插入操作和删除操上比vector快
3. set不可以直接存取元素(不可以使用at.(pos)与[]操作符)。 
4.multiset与set的区别——set技支持唯一键值,每个元素值只能出现一次;而multiset中同一值可以出现多次
5.不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的,如果希望修改一个元素值必须先删除原有的元素,再插入新的元素


(二)set容器的插入与迭代器

set.insert(elem);//在容器中插入元素

set.begin();//返回容器中第一个数据的迭代器

set.end();//返回容器中最后一个数据之后的迭代器

set容器默认升序排序

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(2);
    s.insert(5);
    set<int>::iterator it;
    for(it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    return 0;

set.rbegin()://返回容器中倒数第一个元素的迭代器 

set.rend();//返回容器中倒数最后一个元素的后面的迭代器

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(2);
    s.insert(5);
    set<int>::reverse_iterator it;
    for(it=s.rbegin();it!=s.rend();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    return 0;


(三)set容器拷贝构造与赋值

set(const set&st);//拷贝构造函数
set& operator=(const set &st); 
set.swap(st);//交换两个集合容器

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(2);
    s.insert(5);
    set<int>::iterator it;
    set<int> s1(s);//调用拷贝构造函数 
    set<int> s2;//调用默认构造函数
    s2=s1; 
    for(it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
        for(it=s2.begin();it!=s2.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    return 0;

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(2);
    s.insert(5);
    set<int>::iterator it;
    set<int> s1(s);//调用拷贝构造函数 
    set<int> s2;//调用默认构造函数
    s2=s1; 
    s2.insert(6); 
    s2.swap(s);  
    for(it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
        for(it=s2.begin();it!=s2.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    return 0;


(四)set容器的删除

set.size();//返回容器中元素的数目

set.empty();//判断容器是否为空

set容器的删除
set.clear();//清除所有元素
set.erase(pos);/删除pos迭代器所指的元素, 反回下一个元素的迭代器
set.erase(beg, end);//删除区间[beg,end)的所有元素删钾区间内的元素
set.erase(elem);//删除容器中值为elem的元素

删除set容器的最小值

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s1;
    s1.insert(2);
    s1.insert(4);
    s1.insert(6);
    s1.insert(8);    
    set<int>::iterator it;
    it=s1  .begin() ;
    s1.erase(it);
    for(it=s1.begin();it!=s1.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;

    return 0;

删除set容器的最大值

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s1;
    s1.insert(2);
    s1.insert(4);
    s1.insert(6);
    s1.insert(8);    
    set<int>::iterator it;
    it=s1.end() ;
    it--;
    s1.erase(it);
    for(it=s1.begin();it!=s1.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;

    return 0;

set容器不支持使用反向迭代器对元素进行删除

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s1;
    s1.insert(2);
    s1.insert(4);
    s1.insert(6);
    s1.insert(8);    
    cout<<s1.erase(5)<<endl;//删除的元素不在set中返回false 
    cout<<s1.erase(4)<<endl;
    return 0;


http://www.kler.cn/a/528876.html

相关文章:

  • FastAPI 多语言国际化实现:支持25种语言的博客系统
  • 汽车中控屏HMI界面,安全和便捷是设计的两大准则。
  • vsnprintf() 将可变参数格式化输出到字符数组
  • C# 实现 “Hello World” 教程
  • C# 数组和列表的基本知识及 LINQ 查询
  • WebForms DataList 深入解析
  • Android --- CameraX讲解
  • AI开发之 ——Anaconda 介绍
  • Easy系列PLC尺寸测量功能块ST代码(激光微距仪应用)
  • 动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)
  • 算法【有依赖的背包】
  • 第26节课:内容安全策略(CSP)—构建安全网页的防御盾
  • 【MyDB】4-VersionManager 之 3-死锁及超时检测
  • 3D 对象的属性
  • plot(rrt_path(:, 1), rrt_path(:, 2), ‘b-‘, ‘LineWidth‘, 2); % 蓝色线条表示RRT路径
  • PDCA 循环法
  • 苍穹外卖第一天
  • 【股票数据API接口45】如何获取股票指历史分时MACD数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • (9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
  • 深入剖析C语言字符串操作函数:my_strlen与my_strcpy
  • 【问题记录】DeepSeek本地部署遇到问题
  • Python-列表
  • HTB:LinkVortex[WriteUP]
  • STM32 AD多通道
  • 一文讲解Java中的ArrayList和LinkedList
  • 【Convex Optimization Stanford】Lec4 CVX-opt-promblem