std::set的核心优势是自动去重、底层红黑树保证有序、O(logn)时间复杂度的插入/删除/查找,基于这些特性,它能高效解决以下几类问题,下面按难度从易到难列出对应题目及解法:
一、基础场景:自动去重 + 有序输出
对应题目:洛谷 P1059 [NOIP2006 普及组] 明明的随机数
题目大意
输入 n 个整数(可能重复),要求:
- 去除其中重复的数;
- 按从小到大的顺序输出这些不重复的数。
解题思路
直接利用std::set的自动去重和天然有序特性:将所有数插入set,遍历set即可得到去重后的有序结果,无需手动去重或排序。
完整代码
#include <iostream