簡體   English   中英

如何根據向量的值的屬性對其進行排序?

[英]How can I sort a vector according to a property of its values?

如果我有一對向量

vector<pair<int,vector<int>>> myvector;

如何根據其內部向量的第n個元素對該向量排序?

as below. 先前在該主題上提出的問題包含使用以下預定義的根據對的第二個元素對對向量進行排序的答案。 should be... 但是,在這種情況下,我不知道的形式應為...

sort(v.begin(), v.end(), sorting_function());

您可以根據我對上一個問題的回答重新使用比較器; sort需要一個實例 ,因此傳入一個臨時實例

std::sort(v.begin(), v.end(), MyComparator<1>());

因此,這是完整的示例:

template <std::size_t N>
struct MyComparator
{
   typedef std::pair<int, std::vector<int>> value_type;
   bool operator()(const value_type& lhs, const value_type& rhs)
   {
      return lhs.second.at(N) < rhs.second.at(N);
   }
};

/**
 * A set of (int, int{2,}) pairs, sorted by the 2nd element in
 * the 2nd item of each pair.
 */
std::vector<std::pair<int, std::vector<int>>> my_data;

int main()
{
    my_data.push_back(std::make_pair(1, std::vector<int>{0,5,0,0}));
    my_data.push_back(std::make_pair(2, std::vector<int>{0,2,0,0}));
    my_data.push_back(std::make_pair(3, std::vector<int>{0,1,0,0}));
    my_data.push_back(std::make_pair(4, std::vector<int>{0,9,0,0}));

    std::sort(my_data.begin(), my_data.end(), MyComparator<1>());

    for (const auto& el : my_data)
        std::cout << el.first << ' ';
}

// Output: 3 2 1 4

現場演示

struct comparator
{
    comparator (int n) : n(n) { }

    typedef std::pair<int, std::vector<int>> key_type;

    bool operator() (key_type const & k1, key_type const & k2)
    {
        return k1.second[n] < k2.second[n];
    }

    int n;
};

我不知道您想從哪里來,但是基本上就是這樣。 另外,您還應該在其中檢查范圍。

然后,您可以通過以下方式對數組進行排序:

std::sort(v.begin(), v.end(), comparator(n));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM