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

STL06——手写一个简单版本的set

STL06——手写一个简单版本的set

    • 1.特点
    • 2.使用方法
    • 3.【STL 专题之 Set】Set 的实现

1.特点

  • 唯一性std::set 中不允许存储重复的元素,每个元素都是唯一的。插入重复元素,那么什么都不会发生。
  • 有序性std::set 中的元素是按照升序进行排序的。(这种排序是通过红黑树的自平衡性质实现的,保证了插入、删除等操作的高效性)
  • 插入元素: 使用 insert 成员函数可以将元素插入到集合中,如果元素已存在,则插入操作会被忽略。

2.使用方法

  • 包含 #include
  • 用途:用于存储一组唯一的元素,并按照元素的值进行排序
  • 也为存储唯一元素提供了高效的查找、插入和删除操作。

3.【STL 专题之 Set】Set 的实现

题目描述

本题需要设计一个 Set 类,实现如下功能:

**
**

1、基础功能

  • 构造函数:初始化 Set 实例
  • 析构函数:清理资源,确保无内存泄露

2、核心功能

  • 在 Set 中插入一个元素
  • 在 Set 中删除一个元素
  • 判断一个元素是否在 Set 中
  • 判断 Set 是否为空
  • 获取 Set 的大小

输入描述

题目的包含多行输入,第一行为正整数 N, 代表后续有 N 行命令序列。

接下来 N 行,每行包含一个命令,命令格式为 [operation] [parameters] ,具体命令如下:

**
**

insert 命令:

  • 格式:insert [element]
  • 功能:在 Set 中添加 element,如果元素已经存在,则不进行任何操作

erase 命令

  • 格式:erase [element]
  • 功能:删除 Set 中的元素 element,如果集合中不存在 element,则不进行任何操作

contains 命令:

  • 格式:contains [element]
  • 功能:判断 Set 中是否包含 element 元素

empty 命令:

  • 格式:empty
  • 功能:判断 Set 是否为空

size 命令:

  • 格式:size
  • 功能:获取 Set 的大小

输出描述

输出为每行命令执行后的结果,具体输出格式如下:

insert 命令:无输出

erase 命令:无输出

contains 命令:如果 Set 中存在该元素,则输出 true,否则输出 false,输出独占一行

empty 命令:如果 Set 为空,则输出 true,否则输出 false,输出独占一行

size 命令:输出一个整数,独占一行,表示 Set 的大小

#include"RedBlackTree.h"
template<typename Key>
class Set
{
public:Set():rbTree(){}void insert(const Key& key){rbTree.insert(key, key);//key和value都是key}void erase(const Key& key){rbTree.remove(key);}size_t size(){return rbTree.getSize();}bool empty(){return rbTree.empty();}bool contains(const Key& key){if (rbTree.at(key) != NULL)return true;elsereturn false;}
private:redBlackTree<Key, Key> rbTree;
};int main() {Set<int> mySet;int N;std::cin >> N;getchar();std::string line;for (int i = 0; i < N; i++) {std::getline(std::cin, line);std::istringstream iss(line);std::string command;iss >> command;int element;if (command == "insert") {iss >> element;mySet.insert(element);}if (command == "earse") {iss >> element;mySet.erase(element);}if (command == "contains") {iss >> element;std::cout << (mySet.contains(element) ? "true" : "false") << std::endl;}if (command == "size") {std::cout << mySet.size() << std::endl;}if (command == "empty") {std::cout << (mySet.empty() ? "true" : "false") << std::endl;}}return 0;
}

http://www.mrgr.cn/news/43356.html

相关文章:

  • C++ 语言特性30 - 模板介绍
  • leetcode42:接雨水
  • 汇编DEBUG程序调用
  • [ESP32]ESP-IDF使用组件添加U8g2图形库
  • 3dsMax合并FBX的时候相同的节点会被合并(重命名解决),3Ds MAX创建空物体(虚拟对象或者点)
  • 一文秒懂鸿蒙Harmony-Next状态管理
  • 【AI知识点】正态分布(高斯分布)和中心极限定理(CLT)
  • InnoDB 中的索引页与数据行的关联详解
  • 封装el-upload组件,用于上传图片和视频
  • 镜头、diffuser、DOE
  • Leecode热题100-295.数据流中的中位数
  • U3D游戏开发之场景解锁小系统(UGUI版)
  • MySQL基础之约束
  • Android2024.2.1升级错误
  • 表达式求值(可以计算两位数以上)
  • 【云原生】云原生架构的反模式
  • dll动态库加载失败导致程序启动报错以及dll库加载失败的常见原因分析与总结
  • 今日指数项目个股描述功能实现
  • 弧形导轨驱动器高效使用技巧!
  • 双十一狂欢派对 五款市面上获得好评的好物