文章目录
- 一、容器概览
- 二、核心特性对比
- 三、基础操作详解
- 四、关键成员函数解析
- 五、底层实现探秘
- 六、性能优化实践
- 七、典型应用场景
-
- 数据去重统计
- 实时排行榜维护
- 区间查询系统
- 八、注意事项与陷阱
-
- 元素不可变性
- 自定义类型的比较函数
- 迭代器失效问题
- 进阶技巧:结合STL算法
- 十、总结与选型建议
一、容器概览
(1)set/multiset是STL提供的关联容器,基于红黑树实现,具有自动排序特性
(2)set保证元素唯一性,multiset允许重复元素
(3)时间复杂度:插入/删除/查找 O(log n)
(4)头文件:#include
二、核心特性对比
特性 | set | multiset |
---|---|---|
元素唯一性 | √ | × |
insert返回值 | pair<iter, bool> | iterator |
count耗时 | O(log n) | O(log n + k) |
equal_range应用 | 较少 | 关键方法 |
三、基础操作详解
// 初始化示例
set<int> s = {
5, 2, 8, 2, 7}; // 实际存储 {2,5,7,8}
multiset<int> ms = {
5, 2, 8, 2, 7}; // 存储 {2,2,5,7,8}
// 自定义排序规则
struct CaseInsensitiveCompare {
bool operator()(const string& a, const string& b) const {
return lexicographical_compare(a.begin(), a.end(),
b.begin(), b.end(),
[](char c1, char c2){
return tolower(c1) < tolower(c2);
});
}
};
set<string, CaseInsensitiveCompare> caseInsensitiveSet{
"Apple", "banana", "APPLE"};