当前位置: 首页 > wzjs >正文

网站四网合一郑州seo优化顾问热狗

网站四网合一,郑州seo优化顾问热狗,武穴市网站两学一做,南昌建设公司网站​​一、核心特性​​ ​​唯一性与自动排序​​ std::set存储的元素​​唯一且默认升序排列​​&#xff08;通过std::less实现&#xff09;。插入重复元素会被自动忽略&#xff1a; set<int> s {3, 1, 2, 2}; // 实际存储 {1, 2, 3} ​​底层实现​​&#xff1a;红黑…

​一、核心特性​

  1. ​唯一性与自动排序​
    std::set存储的元素​​唯一且默认升序排列​​(通过std::less实现)。插入重复元素会被自动忽略:

    set<int> s = {3, 1, 2, 2}; // 实际存储 {1, 2, 3}
    • ​底层实现​​:红黑树(自平衡二叉搜索树),保证插入、删除、查找的​​时间复杂度为O(log n)​
  2. ​元素不可修改​
    元素值即键(Key),修改会破坏红黑树结构。迭代器类型为const_iterator,禁止写操作:

    auto it = s.find(2);
    *it = 4; // 编译错误!元素不可直接修改
    • 修改的正确姿势​​:先删除旧值,再插入新值

  3. ​无随机访问​
    不支持operator[]或下标访问,遍历​​必须依赖迭代器​​(双向迭代器,仅支持++/--


🛠️ ​​二、基本操作​

​1. 初始化与赋值​
​方式​​示例​
默认构造set<int> s;
初始化列表set<int> s = {1, 3, 2}; → {1, 2, 3}
迭代器范围初始化vector<int> v{5,4,3}; set<int> s(v.begin(), v.end());
自定义排序规则set<int, greater<int>> s;(降序)

4

12

​2. 增删查操作​
​操作​​函数​​示例​​返回值​
插入元素insert(value)s.insert(4);pair<iter, bool>(成功时bool=true
删除元素erase(key) / erase(iter)s.erase(3); 或 s.erase(s.begin());返回被删元素后的迭代器
查找元素find(key)auto it = s.find(2);找到返回迭代器,否则返回s.end()
统计元素存在性count(key)if (s.count(2)) { ... }01(因元素唯一)

1

9

​3. 遍历方式​
// 迭代器遍历
for (auto it = s.begin(); it != s.end(); ++it) {cout << *it << " ";
}// 范围循环(C++11)
for (int val : s) {cout << val << " ";
}

⚙️ ​​三、高级操作​

​1. 自定义排序规则​

通过函数对象或Lambda实现复杂排序:

struct CaseInsensitiveCompare {bool operator()(const string& a, const string& b) const {return tolower(a[0]) < tolower(b[0]); // 首字母不区分大小写}
};
set<string, CaseInsensitiveCompare> s;
​2. 范围查询(lower_bound / upper_bound)​
 
set<int> s = {10, 20, 30, 40};
auto low = s.lower_bound(20); // 首个 ≥20 的元素 → 20
auto high = s.upper_bound(30); // 首个 >30 的元素 → 40
  • ​应用场景​​:快速定位有序数据中的区间
​3. 结构体存储​

需重载operator<

struct Person {string name;int age;bool operator<(const Person& p) const { return age < p.age; // 按年龄升序}
};
set<Person> s = {{"Alice", 30}, {"Bob", 25}};

⚖️ ​​四、性能对比:set vs vector

​操作​setvector​适用场景​
​插入/删除​O(log n)(任意位置)O(n)(非尾部操作)频繁中间插入/删除 → ​​选set
​查找​O(log n)(二分查找)O(n)(线性遍历)高频查找 → ​​选set
​随机访问​❌ 不支持✅ O(1)按索引访问 → ​​选vector
​内存占用​较高(树节点开销)较低(连续内存)内存敏感 → ​​选vector
​元素顺序​自动排序插入顺序需有序 → ​​选set

💡 ​​关键结论​​:

  • ​唯一性+有序性​​需求优先选set
  • ​随机访问+连续存储​​需求优先选vector

🧩 ​​五、典型应用场景​

  1. ​数据去重与排序​
    从重复数据中提取唯一有序序列:

    vector<int> data = {5, 3, 5, 2, 1};
    set<int> unique_sorted(data.begin(), data.end()); // {1, 2, 3, 5}

  2. ​高效存在性检查​
    黑名单/白名单快速过滤:

    set<string> blacklist = {"user1", "user2"};
    if (blacklist.find(input_user) != blacklist.end()) block_user();

  3. ​范围统计与区间查询​
    成绩分级、区间数据分析:

    set<int> scores = {60, 75, 85, 90};
    auto pass = scores.lower_bound(60); // ≥60的第一个元素


⚠️ ​​六、避坑指南​

  1. ​迭代器失效问题​
    删除元素时,​​仅被删元素的迭代器失效​​,其他迭代器仍有效。

  2. ​无法修改元素值​
    “修改”需先删除再插入:

    auto it = s.find(old_val);
    if (it != s.end()) {s.erase(it);s.insert(new_val); // 安全修改
    }

  3. ​自定义类型必须重载operator<
    否则编译失败(红黑树需比较规则)。


💎 ​​总结​

  • ​核心优势​​:自动去重、有序存储、O(log n)高效操作;
  • ​核心局限​​:无随机访问、内存开销较高;
  • ​替代方案​​:
    • 需重复元素 → multiset
    • 需O(1)查找 → unordered_set(哈希表实现,无序)。
http://www.dtcms.com/wzjs/50945.html

相关文章:

  • 外国网站dns百度学术官网登录入口
  • 济南济南网站建设公司淘宝宝贝关键词排名查询工具
  • 做外贸需要关注的网站有什么问题网站推广优化c重庆
  • 济南专门做公司网站的公司网站开发需要的技术
  • 大图模板网站百度收录入口在哪里
  • 广告公司起名用字大全沈阳专业seo
  • 58同城网站官网百度权重3的网站值多少
  • 中国行业网站联盟百度手机管家
  • 那个网站做搬家推广比较好seo云优化软件
  • 企业网站制作前期需要什么资料网站开通
  • 网页设计师学习网站百度一下你就知道了官网
  • 惠州市建设工程交易中心网站营业推广是什么意思
  • 惠东网站设计绍兴seo优化
  • 西安网站排名优化百度西安
  • 揭阳做网站的seo云优化是什么意思
  • 自己写代码做网站合肥网站制作推广
  • 网站备案各种问题汇总百度企业推广怎么收费
  • 太仓有没有做网站建设的手机网站快速建站
  • 做平面哪个网站的素材最好如何在百度上建立网站
  • 软件开发哪里学河南百度关键词优化排名软件
  • wordpress 提供api成都关键词优化平台
  • 咨询服务类网站建设百度推广服务费一年多少钱
  • wordpress允许用户修改文章整站seo外包
  • 实名制认证网站seo是搜索引擎营销
  • 网站开发网页设计北京师范大学出版社seo的方式有哪些
  • 东莞有哪些网络有限公司网站关键词推广优化
  • 苏州网站开发公司兴田德润优惠吗怎么开通网站平台
  • 包头建设安全协会网站做网络推广有哪些平台
  • 营销网站型建设多少钱宁波免费seo排名优化
  • asp.net开发网站和优势搜索引擎营销的方式