C++中set的简单操作

C++STL中封装了许多复杂的数据结构算法和大量的数据结构操作,vector封装了数组,list封装了链表,set和map封装了二叉树等。set是一个不允许重复元的有序容器,用于访问vector和list的项的许多做法也对set适用。

1.set中的操作

iterator begin(); 返回一个适当的迭代器,表示容器中的第一项

iterator begin(); 返回一个适当的迭代器,表示容器中的尾端(终端)标记,即容器中最后一项之后的位置

int size() const;表示当前容器中的元素个数

bool empty();表示当前容器知否为空

void clear();从容器中删除所有元素

pair<iterator,bool> insert(const object &x);iterator表示新插入的项或者插入失败项的当前位置,

                              bool表示是否插入成功

pair<iterator,bool> insert(iterator hint,const object &x);iterator hint表示插入项给的位置,

int erase(const Object &x);删除x并且返回删除的项数,

iterator erase(iterator itr);删除iterator给定位置上的对象,返回值为已删除项itr后面的元素的位置,

                   并使itr失效,不能再使用

iterator erase(iterator start,iterator end);删除所有从start开始直到end(不包含end)的项

iterator find(const Object &x) const;返回一个表示该位置的迭代器,若查找失败则返回终端标记。


### C++ 中 `std::set` 的基本概念 `std::set` 是 C++ 标准模板库 (STL) 提供的一种关联容器,用于存储唯一的键值,并自动保持有序状态。该容器内部实现通常基于红黑树结构,这使得插入、删除和查找操作的时间复杂度均为 O(log n)[^1]。 #### 主要特点 - 所有元素均唯一; - 自动按升序排列(可通过自定义比较函数改变顺序); - 支持高效的插入、删除以及查找操作; ### 创建与初始化 创建一个简单的整数集合可以如下所示: ```cpp #include <iostream> #include <set> int main() { std::set<int> mySet; // 定义一个 int 类型的 set // 插入元素 mySet.insert(10); mySet.insert(20); mySet.insert(30); // 输出所有元素 for (const auto& elem : mySet) { std::cout << elem << ' '; } } ``` 上述代码展示了如何声明并初始化一个名为 `mySet` 的 `std::set<int>` 对象,接着向其中添加三个不同的整数值,并遍历打印这些值[^2]。 ### 基本操作 除了插入外,还有其他常用的操作方法,比如查找特定元素是否存在或者移除某个指定项: ```cpp // 查找元素 if (mySet.find(20) != mySet.end()) { std::cout << "Element found!" << std::endl; } // 删除元素 auto it = mySet.find(20); if (it != mySet.end()) mySet.erase(it); ``` 这里演示了通过 `find()` 函数来定位给定的关键字位置,如果找到了则返回指向该项迭代器,否则返回 end 迭代器表示未找到。对于已存在的项目可以通过调用 erase 方法将其从集合中去除[^3]。 ### 高级特性 当需要更复杂的排序逻辑时,可以在定义 Set 时提供第二个参数作为比较谓词: ```cpp struct CompareHeight { bool operator()(Person const &a, Person const &b) const{ return a.height > b.height; } }; std::set<Person, CompareHeight> people_set; people_set.insert(Person{"Alice", 170}); people_set.insert(Person{"Bob", 180}); for(auto&& person : people_set){ std::cout<<person.name<<" is "<<person.height<<"\n"; } ``` 这段程序片段说明了怎样利用自定义类 `CompareHeight` 来按照身高降序的方式管理一组人物对象 `People`[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值