首頁 >後端開發 >C++ >如何依第二個元素對向量對進行有效排序?

如何依第二個元素對向量對進行有效排序?

Linda Hamilton
Linda Hamilton原創
2024-12-09 13:47:241001瀏覽

How to Efficiently Sort a Vector of Pairs by the Second Element?

如何透過Pair 的第二個元素對向量對進行高效排序

本文解決了基於對的向量對向量進行排序的問題每對的第二個元素依升序排列。雖然為此任務建立自訂函數物件是一個可行的解決方案,但仍有利用現有 STL 元件和 std::less 的替代方法。

將std::sort 與自訂比較器一起使用

一種方法是使用自訂比較器作為std::sort 的可選第三個參數。這個自訂比較器稱為sort_pred,定義如下:

struct sort_pred {
    bool operator()(const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
        return left.second < right.second;
    }
};

要使用此比較器,只需將其傳遞給std::sort:

std::sort(v.begin(), v.end(), sort_pred());

使用C 11 Lambda

如果使用C 11 編譯器,您可以利用lambda取代自訂比較器:

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
    return left.second < right.second;
});

使用通用範本進行對排序

為了獲得更大的靈活性和可重用性,您可以建立一個名為sort_pair_second的通用模板:

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

使用此模板,您可以實現所需的排序:如下:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn