在 C++ 中,std::set 是一個關聯容器,它包含一組唯一的對象。std::set 通過比較函數(也稱為排序函數)來確保元素按順序存儲。默認情況下,std::set 使用 < 運算符進行比較,但你可以通過提供自定義的比較函數來改變這種行為。
要自定義 std::set 的比較函數,請遵循以下步驟:
operator() 成員函數。這個函數將用作比較函數。std::set 實例時,將自定義比較函數作為模板參數傳遞。下面是一個示例,展示了如何自定義 std::set 的比較函數,以便按照元素的絕對值從大到小排序:
#include<iostream>
#include <set>
#include <cmath>
// 自定義比較函數
struct CustomCompare {
bool operator()(const int& a, const int& b) const {
return std::abs(a) > std::abs(b);
}
};
int main() {
// 使用自定義比較函數創建 set
std::set<int, CustomCompare> my_set;
// 向 set 添加元素
my_set.insert(-5);
my_set.insert(3);
my_set.insert(-8);
my_set.insert(1);
// 輸出 set 中的元素
for (const auto& elem : my_set) {
std::cout<< elem << " ";
}
return 0;
}
輸出結果將會是:
-8 -5 3 1
這表明 std::set 中的元素按照它們絕對值的降序排列。