第3关:STL模板之关联容器:集合set的操作详解

您所在的位置:网站首页 st概念代码 第3关:STL模板之关联容器:集合set的操作详解

第3关:STL模板之关联容器:集合set的操作详解

2024-07-17 17:52| 来源: 网络整理| 查看: 265

做一个精致的利己主义者

// // main.cpp // step3 // // Created by ljpc on 2018/7/24. // Copyright © 2018年 ljpc. All rights reserved. // #include #include #include #include using namespace std; int main(int argc, const char * argv[]) { // 请在这里补充代码,完成本关任务 /********* Begin *********/ // 1.创建一个空的集合st,数据类型为int set st; // 2.读取数据:第一行整数n,后面n行插入或删除操作,并按指定要求输出 int n,x; cin>>n; char str[20]; while(n--){ scanf("%s %d", str, &x); if(strcmp(str, "insert")==0){//strcmp函数比较字符串的函数,若相同则返回比0大的数字,相等则返回等于0,反之 if(st.find(x) == st.end()){//find()方法找到了则返回该元素在集合中的地址,否则返回集合尾地址 st.insert(x);//说明没找到,就直接插入 }else { printf("%d in set\n",x);//说明找到了 } } else if(strcmp(str,"erase")==0){//使出同样的招数在删除阶段 if(st.find(x)!=st.end()){//在集合中找到x的元素不为尾地址为真 st.erase(x);//就删除x元素 }else { printf("%d not in set\n",x);//说明x不在集合中 } } } // 3.遍历集合st,并按指定要求输出在一行输出集合所有元素,中间空格隔开,末尾'\n' printf("print set: %d\n", int(st.size())); for (set::iterator it=st.begin(); it!=st.end(); it++){//集合的遍历要通过迭代器的方式进行,从首地址开始逐渐指向尾地址; if(it==st.begin()){ printf("%d",*it); }else{ printf(" %d", *it); } } printf("\n"); // 4.读取数据:整数m以及m次查找操作,并按指定要求输出 int m; scanf("%d",&m); while(m--){ scanf("%s %d",str,&x); if(st.find(x)!=st.end()){ printf("find %d in set\n", x); }else{ printf("find %d not in set\n", x); } } // 5.清空集合st st.clear(); /********* End *********/ printf("%d\n", int(st.size())); return 0; }

任务描述

本关任务:仔细阅读下文集合的相关操作,并使用set完成N次插入或删除元素操作,以及集合的遍历和查找等要求。

相关知识

为了完成本关任务,你需要掌握:1.集合的概念,2.插入元素,3.删除元素,4.遍历集合,5.查找元素,6.清空集合。

集合的概念

集合set就是数学上的集合,其中的每个元素没有重复的,但是set中的元素在数据结构中是有序存储的(默认升序),为了高效的实现插入、删除和查找等操作,这与数学上的集合中元素无序性有点区别。

集合set也是STL中的一种标准关联容器,其底层数据结构是基于平衡搜索树(红黑树)实现的,插入删除等操作都是通过迭代器指针实现的,不涉及内存操作,因此效率非常高。

集合set被包含在set头文件中,基本定义方式如下:

set st,定义了一个元素类型为int整型的集合st

插入元素

往集合中插入一个元素通过调用insert()方法实现:

set st; // 创建一个整型集合stst.insert(1); // 向st插入一个元素1st.insert(2); // 向st插入一个元素2

删除元素

集合元素的删除通过调用erase()方法实现,传入的参数可以是待删除的元素,也可以是待删除元素的地址:

set::iterator it = st.begin(); // 定义一个迭代器,初始为st的首地址cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3