文章目录
一、容器概览
(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"};