C++ set自动去重排序容器简单用法

本文记录的是set的一些最简单用法,有兴趣的可以去尝试更多函数

头文件

#include<set>

初始化

set<int>a;//也可以是其它数据类型

加入数据

a.insert(99);
a.insert(12);
a.insert(99);
a.insert(19);

遍历

for(set<int>::iterator i=a.begin();i!=a.end();i++)
    cout<<*i<<' ';
//12 19 99
//反向时需要注意,end()指向的是最后一个元素再往后的地址(无元素)

其它函数

//获取数据量
a.size()//3
//是否为空
a.empty()//false
//元素是否存在
a.count(12)//1
a.count(11)//0
//删除元素
a.erase(12)//19 99
//清空
a.clear()

从数组或其它容器导入数据

int t[100]={100,23,12,22,45,67};
set<int>a(t+1,t+5);
//12 22 23 45


deque<int>t;
t.push_back(111);
t.push_back(113);
t.push_front(222);
t.push_back(1213);
set<int>a(t.begin(),t.end()-1);
//111 113 222
### 使用 C++ 对数组进行和排序 在 C++ 中,可以采用多种方式来实现数组的和排序功能。以下是两种常见的方法: #### 方法一:利用 `std::set` 实现和排序 `std::set` 是 STL 提供的一种容器,其底层基于红黑树实现,具有自动排序和的特点[^1]。通过将数组中的元素插入到 `std::set` 容器中,即可轻松完成和排序。 下面是一个完整的代码示例: ```cpp #include <iostream> #include <set> #include <vector> using namespace std; int main() { vector<int> arr = {4, 2, 7, 2, 8, 4}; // 示例数组 set<int> uniqueSet(arr.begin(), arr.end()); // 利用 set 自动和排序 cout << "并排序后的结果:" << endl; for (const auto& elem : uniqueSet) { cout << elem << " "; } return 0; } ``` 上述代码中,我们将原始数组的数据范围映射至 `std::set` 的迭代器范围内,从而实现了自动和排序的功能。 --- #### 方法二:结合 `std::sort` 和 `std::unique` 另一种常用的方式是先对数组进行排序,然后再使用 `std::unique` 函数除相邻的复项[^3]。需要注意的是,`std::unique` 只能移除连续的复元素,因此必须先调用 `std::sort` 进行预处理。 下面是具体实现代码: ```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> arr = {4, 2, 7, 2, 8, 4}; // 示例数组 sort(arr.begin(), arr.end()); // 排序 arr.erase(unique(arr.begin(), arr.end()), arr.end()); // cout << "并排序后的结果:" << endl; for (const auto& elem : arr) { cout << elem << " "; } return 0; } ``` 此方法的核心在于 `std::sort` 负责排列数组顺序,而 `std::unique` 将所有相邻的复元素移动到数组末尾,并返回指向新序列结束位置的迭代器。随后可以通过 `erase` 删除多余部分。 --- 以上两种方法均能够高效地解决数组和排序的问题。如果需要保留原数组不变,则推荐使用 `std::set`;若希望直接修改原有数组,则可以选择 `std::sort` 结合 `std::unique` 的方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值