问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C++,STL容器 set/multiset:集合/多重集合深入解析

创作时间:
作者:
@小白创作中心

C++,STL容器 set/multiset:集合/多重集合深入解析

引用
CSDN
1.
https://blog.csdn.net/Allen_Spring/article/details/145531339

C++ STL中的set和multiset容器是基于红黑树实现的关联容器,具有自动排序特性。set保证元素唯一性,而multiset允许重复元素。本文将从容器概览、核心特性对比、基础操作详解等多个维度对这两个容器进行深入解析。

一、容器概览

(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"};
  

四、关键成员函数解析

五、底层实现探秘

六、性能优化实践

七、典型应用场景

八、注意事项与陷阱

九、进阶技巧:结合STL算法

十、总结与选型建议

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号