溫馨提示×

C++中如何自定義set集合的比較函數(shù)

c++
小樊
105
2024-09-13 02:36:18
欄目: 編程語言

在 C++ 中,std::set 是一個關(guān)聯(lián)容器,它包含一組唯一的對象。std::set 通過比較函數(shù)(也稱為排序函數(shù))來確保元素按順序存儲。默認情況下,std::set 使用 < 運算符進行比較,但你可以通過提供自定義的比較函數(shù)來改變這種行為。

要自定義 std::set 的比較函數(shù),請遵循以下步驟:

  1. 定義一個結(jié)構(gòu)體或類,該結(jié)構(gòu)體或類包含一個重載的 operator() 成員函數(shù)。這個函數(shù)將用作比較函數(shù)。
  2. 在創(chuàng)建 std::set 實例時,將自定義比較函數(shù)作為模板參數(shù)傳遞。

下面是一個示例,展示了如何自定義 std::set 的比較函數(shù),以便按照元素的絕對值從大到小排序:

#include<iostream>
#include <set>
#include <cmath>

// 自定義比較函數(shù)
struct CustomCompare {
    bool operator()(const int& a, const int& b) const {
        return std::abs(a) > std::abs(b);
    }
};

int main() {
    // 使用自定義比較函數(shù)創(chuàng)建 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;
}

輸出結(jié)果將會是:

-8 -5 3 1

這表明 std::set 中的元素按照它們絕對值的降序排列。

0