首頁 > 後端開發 > C++ > 如何根據 C 中的第二個元素對向量對進行排序?

如何根據 C 中的第二個元素對向量對進行排序?

Mary-Kate Olsen
發布: 2024-12-10 22:35:11
原創
712 人瀏覽過

How Can I Sort a Vector of Pairs Based on the Second Element in C  ?

使用第二個元素對向量對進行排序

根據第二個元素對向量對向量對進行排序是一項常見的編程任務。本文探討了使用現有 STL 組件和 std::less 來實現此目的的各種方法。

方法 1:自訂比較器

自訂比較器是一種常見方法。建立一個具有重寫的operator()函數的結構體,該函數根據第二個元素對對進行比較。例如:

struct sort_pred {
    bool operator()(const std::pair<int, int>& left, const std::pair<int, int>& right) {
        return left.second < right.second;
    }
};
登入後複製

然後,將此比較器作為第三個參數呼叫sort():

std::sort(vec.begin(), vec.end(), sort_pred());
登入後複製

方法2:Lambda 表達式(C 11)

在C 11 中,您可以使用lambda表達式定義比較函數:

std::sort(vec.begin(), vec.end(), [](const std::pair<int, int>& left, const std::pair<int, int>& right) {
    return left.second < right.second;
});
登入後複製

方法3:基於通用模板的比較器(C 11)

對於可重複使用程式碼,建立一個基於通用模板的比較器:

template <class T1, class T2, class Pred = std::less<T2>>
struct sort_pair_second {
    bool operator()(const std::pair<T1, T2>& left, const std::pair<T1, T2>& right) {
        Pred p;
        return p(left.second, right.second);
    }
};
登入後複製

然後,使用這個基於模板的方法調用sort()比較器:

std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
登入後複製

推薦

為了可重複使用性,基於通用模板的比較器是一個強大的選項。然而,為了簡單起見,編寫自訂比較器或 lambda 表達式通常就足夠了。

以上是如何根據 C 中的第二個元素對向量對進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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