首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ STL set 完整指南:成員函數、用法與自定義比較

     編輯:關於C++

set 簡介

std::set 是有序關聯容器,元素唯一、自動按比較函數排序(默認 less,升序)。底層為紅黑樹,查找/插入/刪除均為 O(log n)。不允許直接修改元素值(會破壞順序),需刪除後重新插入。

常用成員函數速查

函數說明
begin()/end()返回首/尾後迭代器
insert(val)插入元素,返回 pair<iterator,bool>
erase(pos/val)按迭代器或值刪除
find(val)查找元素,未找到返回 end()
lower_bound(val)首個 ≥ val 的迭代器
upper_bound(val)首個 > val 的迭代器
equal_range(val)返回 [lower, upper) 範圍
size()/empty()元素個數/是否為空
clear()清空容器
swap(other)交換兩個 set

基本用法示例

set s;
s.insert(8); s.insert(1); s.insert(12); s.insert(6); s.insert(8); // 重複忽略
for (int x : s) cout << x << ' '; // 輸出: 1 6 8 12

自定義比較函數

方式一:函數對象

struct Desc { bool operator()(int a, int b) const { return a > b; } };
set s2; // 降序

方式二:結構體內重載 operator<


struct Info {
    string name; double score;
    bool operator<(const Info& other) const { return score > other.score; } // 分數降序
};
set s3;

集合運算(算法頭文件)


set A, B, U, I, D, SD;
set_union(A.begin(), A.end(), B.begin(), B.end(), inserter(U, U.begin()));
set_intersection(A.begin(), A.end(), B.begin(), B.end(), inserter(I, I.begin()));
set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(D, D.begin()));
set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(SD, SD.begin()));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved