1. 程式人生 > >C++對一組pair資料進行排序(sort函式的使用)

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;
    }
}

執行截圖

相關推薦

C++pair資料進行排序(sort函式的使用

最近在寫一個演算法的時候,把一些資料存在了pair中,並且需要根據pair中first或者second的值對這些資料進行排序。比如:輸入資料(1,2)、(4,2)、(3,3)、(2,1)根據first的值大小進行升序排序,輸出(1,2)、(2,1)、(3,3)、(4,2)。經過思索之後得到的實現方法如下:首先

【用法學習】C++ pair用法及使用sort函式pair資料進行排序

 pair 預設對first升序,當first相同時對second升序; 類模板:template <class T1, class T2> struct pair 引數:T1是第一個值的資料型別,T2是第二個值的資料型別。 功能:pair將一對值組

使用C#MongoDB中的資料進行查詢,修改等操作

首先,使用的是官方提供的C#訪問元件https://github.com/mongodb/mongo-csharp-driver 然後、編譯後引用MongoDB.Bson.dll及MongoDB.Driver.dll,並在cs檔案中宣告引用 using MongoDB.

C#DataGridView中的資料進行新增、修改、刪除操作c#操作datatable

1.建立表 DataSet ds=new DataSet(); DataTable dt=new DataTable("User"); ds.Add(dt); dt.Columns.Add("user_name",typeof(string)); dt.Columns.Ad

PriorityQueue如何物件型別的資料進行排序

public class Student implements Comparable<Student> {String name;                    //先寫出一個Student類,然後把Student物件加進PriorityQueue的容器裡

C#List中的資料進行取交集、並集、差集和去重操作的方法

第一步:定義兩個list並進行初始化 public List<string> GetList1()         {             List<string> lis

使用 自定義的 ContentProvider 進行應用間的資料互動(另一個APP當前的應用資料進行修改,查詢,getType()等內容的講解

本部落格內容 應用B 對 應用A的資料庫資料進行插入和查詢(其他操作簡略不寫) bookProject 應用A 看一下目錄結構 Book_TABLE.java 關鍵點:private static final String BOOK_DB = "create

c++ 符合條件的元素進行計數(count_if

  #include <iostream> // cout #include <algorithm> // count_if #include <vector> // vector using namespace std; boo

使用 自定義的 ContentProvider 進行應用間的資料互動(另一個APP當前的應用資料進行修改,查詢,getType()等內容的講解

本部落格內容 應用B 對 應用A的資料庫資料進行插入和查詢(其他操作簡略不寫) bookProject 應用A 看一下目錄結構 Book_TABLE.java 關鍵點:private static final String BOOK_DB = "create

c語言資料隨機排序

2014 神州綠盟暑期實習生筆試題-------程式程式設計第一題:第一種方法:使用自己構造的函式來根據每次的位置資訊返回亂序的數字 /* * * 程式功能:對指定的陣列,進行隨機排序,交換陣列中的資料位置 */ #include <stdio.h>

蠻力法,資料進行快排,再找出眾數

 環境 :Windows10, VS2010 #include <iostream> #include <string> using namespace std; int Partition (int r[],int first,int end)

C語言氣泡排序個數按照從小到大進行排序

例如 int a[10] = {0,5,2,3,6,9,8,7,4,1} 對其10個整數由小到大進行排序 思想:氣泡排序 實現一: #include<stdio.h> int main() { int i = 0; in

【Unity&C#】如何Bool型變數進行判斷

在實際的專案工程使用中,有的時候會使用大量相同型別  的 bool型 變數,使用陣列把這些 相同 型別 的變數 放在一起,有利於 資料的操作 怎麼使用 陣列 來存放 相同型別 的變數,使用參考資料1,

C#如何List中的Object進行排序

過多 code same ascend 多個 delegate del object compareto 首先定義一個List類,這個類裏面包含了Name和Total兩個屬性變量,下面就是針對這兩個變量進行排序。 public class Player { pub

【圖解資料結構】 動畫演示選擇排序

前言 由於LeetCode上的演算法題很多涉及到一些基礎的資料結構,為了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解資料結構》,主要使用動畫來描述常見的資料結構和演算法。本系列包括十大排序、堆、佇列、樹、並查集、圖等等大概幾十篇。 選擇排序 選擇排序是一種簡單直觀的排序演算法

MapReduce資料進行排序的實踐

從一個小的例子開始: Map和reduce之間的shuffle(洗牌)是將key值相同的放在一塊,sort(排序)是按照key值進行排序.例如like出現了兩次,就會把like放在一起.you也是.然後根據key值進行按照字典的順序進行排序.下面我想將下面的資料按照時間進行排序,並且ID相

vue 根據數中某項的值進行排序

script 技術分享 class 比較 我們 簡單的 val 對數 ice 一、前言 我在vue項目中遇到了一個表格排序的需求,根據某一項的值的大小從大到小調整數組順序。 二、代碼 表格大概是這個樣子,樣式和圖片在代碼中簡化了。 &lt;table class

用js裡的sort()json資料進行排序

 上示圖片是W3School對Javascript sort()的說明。既然可以對Array進行排序,那對於我們從後臺接收到json資料如何進行相同的排序呢?讓我們來看這樣一段json資料。 排序後 : 讓我們對這個json檔案按照value進行排序,並將排序

ListBox控制元件中的資料進行排序

實現效果:    知識運用:   ListBox控制元件的Sorted屬性  //ListBox控制元件中的資料項是否按字母順序排序   public bool Sorted{get;set;} 實現程式碼: private void button1_Click(object

Excel中根據某個表的順序另外一個表的資料進行排序

問題來源: 今天我們公司銷售部的庫管找我幫忙解決一個問題:3月份的庫存有2個表,A表是3.1的,B表是3.31,現在想要找出2個表的差異,但是400多個貨品在2個表中排序都不一樣;能不能將B表的貨品按照A表的順序排列呢? 首先我想到的是要用到Excel的哪些功能: 排序