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> voidstable_sort ( RandomAccessIterator first, RandomAccessIterator last ); template <class RandomAccessIterator, class Compare> void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
引數解釋:
(1)第一個是要排序的陣列的起始地址。
(2)第二個是結束的地址(最後一位要排序的地址的下一地址)。
(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。
我們可以根據自己的需求自定義第三個引數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項目中遇到了一個表格排序的需求,根據某一項的值的大小從大到小調整數組順序。 二、代碼 表格大概是這個樣子,樣式和圖片在代碼中簡化了。 <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的哪些功能: 排序