C++對一組pair資料進行排序(sort函數的使用)

來源:互聯網
上載者:User

C++對一組pair資料進行排序(sort函數的使用)

最近在寫一個演算法的時候,把一些資料存在了pair中,並且需要根據pair中first或者second的值對這些資料進行排序。比如:輸入資料(1,2)、(4,2)、(3,3)、(2,1)根據first的值大小進行升序排序,輸出(1,2)、(2,1)、(3,3)、(4,2)。
經過思索之後得到的實現方法如下:
首先將這些資料存在vector數組中,vector<pair<int,int>>vec;
然後使用sort函數對數組進行排序,這裡就涉及到了sort函數的使用了。
下面是sort函數使用方法
函式宣告:

template <class RandomAccessIterator>
  void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );

template <class RandomAccessIterator, class Compare>
  void stable_sort ( RandomAccessIterator first, RandomAccessIterator last,
                    Compare comp );

參數解釋:
(1)第一個是要排序的數組的起始地址。
(2)第二個是結束的地址(最後一位要排序的地址的下一地址)。
(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時預設的排序方法是從小到大排序。
我們可以根據自己的需求自訂第三個參數cmp函數,比如若要對整型數組降序排序,則可以這樣來寫cmp函數:

bool cmp(int a, int b)
{
    return a>b;//升序則為a<b
}

這個cmp參數使用起來非常方便,因為它正好能解決我們的pair排序問題。
我們只要根據數組中的元素類型定義cmp函數的參數,並且根據需求定義函數體

bool cmp(pair<int, int>a, pair<int, int>b)
{
    return a.first<b.first;//根據fisrt的值升序排序
    //return a.second<b.second;//根據second的值升序排序
}

然後調用sort函數sort(vec.begin(),vec.end(),cmp)。
便可以根據pair中first的值進行升序排序。

下面是具體代碼實現

#include "stdafx.h"
#include <iostream>
#include <vector>
#include<algorithm>

using namespace std;

//根據first的值升序排序
bool cmp1(pair<int,int>a,pair<int,int>b)
{
    return a.first < b.first;
}

//根據second的值升序排序
bool cmp2(pair<int, int>a, pair<int, int>b)
{
    return a.second < b.second;
}
int main()
{
    vector<pair<int, int>>vec;
    vec.push_back({ 1,2 });
    vec.push_back({ 4,2 });
    vec.push_back({ 3,3 });
    vec.push_back({ 2,1 });
    sort(vec.begin(), vec.end(), cmp1);
    cout << "根據first的值升序排序:" << endl;
    for (auto it = vec.begin();it != vec.end();it++)
    {
        cout << "(" << it->first << "," << it->second << ")" << endl;
    }
    sort(vec.begin(), vec.end(), cmp2);
    cout << "根據second的值升序排序:" << endl;
    for (auto it = vec.begin();it != vec.end();it++)
    {
        cout << "(" << it->first << "," << it->second << ")" << endl;
    }
}

運行

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151558.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.