C++ dictionary能否自定義排序

c++
小樊
91
2024-07-21 12:08:04
欄目: 編程語言

C++中的std::map和std::unordered_map都是基于紅黑樹實(shí)現(xiàn)的,它們是有序的容器,其中元素會(huì)根據(jù)鍵值的大小進(jìn)行排序。因此,你可以自定義排序規(guī)則來對(duì)鍵值進(jìn)行排序,但這需要通過自定義比較函數(shù)或函數(shù)對(duì)象來實(shí)現(xiàn)。

如果你想自定義排序規(guī)則,可以在map或unordered_map的聲明中傳入一個(gè)比較函數(shù)或函數(shù)對(duì)象作為第三個(gè)參數(shù)。比較函數(shù)或函數(shù)對(duì)象必須定義一個(gè)operator()函數(shù),用于比較兩個(gè)鍵值,并返回一個(gè)bool值來指示它們的順序。

以下是一個(gè)示例,展示如何在C++中使用自定義排序規(guī)則對(duì)map進(jìn)行排序:

#include <iostream>
#include <map>

// 自定義比較函數(shù)
struct CustomCompare {
    bool operator() (const std::string& a, const std::string& b) const {
        // 比較規(guī)則:以字符串長度為準(zhǔn)
        return a.length() < b.length();
    }
};

int main() {
    // 使用自定義比較函數(shù)進(jìn)行排序
    std::map<std::string, int, CustomCompare> myMap;

    myMap["apple"] = 5;
    myMap["banana"] = 2;
    myMap["orange"] = 3;

    for (const auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    return 0;
}

在上面的示例中,我們定義了一個(gè)CustomCompare結(jié)構(gòu)體作為自定義比較函數(shù),根據(jù)字符串的長度進(jìn)行排序。然后我們使用這個(gè)自定義比較函數(shù)來聲明一個(gè)map,并插入了幾個(gè)鍵值對(duì)。最后,我們遍歷map并打印出排序后的結(jié)果。

0