首頁 > 後端開發 > C++ > 如何在 C 中正確編譯帶有自訂比較器的集合?

如何在 C 中正確編譯帶有自訂比較器的集合?

Barbara Streisand
發布: 2024-12-21 00:56:10
原創
1003 人瀏覽過

How to Correctly Compile a Set with a Custom Comparator in C  ?

使用自訂比較器編譯集

嘗試建立一組按字典比較而不是數字排序的整數時,編譯時可能會出現問題with g .

遇到的錯誤是由於集合的模板參數類型不正確造成的。在提供的程式碼中:

set<int64_t, lex_compare> s;
登入後複製

lex_compare 不是型別而是函數。為了解決這個問題,我們需要根據 C 的模板要求來建立一個比較器物件。

現代C 解

1. C 20 解:

auto cmp = [](int64_t a, int64_t b) { return ... };
std::set<int64_t, decltype(cmp)> s;
登入後複製

Lambda中的比較器。 lambda 應傳回布林值,指示元素的順序。

2 。 C 11 解:

auto cmp = [](int64_t a, int64_t b) { return ... };
std::set<int64_t, decltype(cmp)> s(cmp);
登入後複製

在 C 11 中,lambda 必須作為參數傳遞給集合建構子。

傳統解

3。函數指標:

bool cmp(int64_t a, int64_t b) {
    return ...;
}
std::set<int64_t, decltype(cmp)*> s(cmp);
登入後複製

4.使用Operator() 進行結構:

struct cmp {
    bool operator() (int64_t a, int64_t b) const {
        return ...
    }
};

std::set<int64_t, cmp> s;
登入後複製

5.布林函數的結構:

bool cmp(int64_t a, int64_t b) {
    return ...;
}

#include <type_traits>
using Cmp = std::integral_constant<decltype(&cmp), &cmp>;
std::set<int64_t, Cmp> set;
登入後複製

以上是如何在 C 中正確編譯帶有自訂比較器的集合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板