欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++結(jié)構(gòu)體排序方式(1條件,多條件)

 更新時(shí)間:2023年08月14日 10:34:25   作者:wo_jiushi_wo  
這篇文章主要介紹了c++結(jié)構(gòu)體排序方式(1條件,多條件),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

c++結(jié)構(gòu)體排序(1條件,多條件)

最近做題的時(shí)候總會(huì)遇到排序問(wèn)題,同樣一個(gè)問(wèn)題用結(jié)構(gòu)體排序和用數(shù)組做差的不僅僅是代碼的長(zhǎng)度,還有理解的難易程度,很明顯,用結(jié)構(gòu)體排序更簡(jiǎn)單易懂。

但結(jié)構(gòu)體不能直接用algorithm頭文件里的sort函數(shù),需要我們自己補(bǔ)充一個(gè)函數(shù)。這里就給大家一一列舉出來(lái)。

一個(gè)判斷條件

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct cj
{
	int num;
	string name;
	int score;
};
bool cmp(cj a,cj b)
{
	return a.score>b.score;
}
int main()
{
	cj x[5];	//這里的5可以手動(dòng)輸入n代替
	for(int i=0;i<5;i++)
	 cin>>x[i].name>>x[i].score>>x[i].num;
	sort(x,x+5,cmp);
	cout<<'\n';
	for(int i=0;i<5;i++)
	cout<<x[i].name<<'\t'<<
	x[i].score<<'\t'<<x[i].num<<'\n';
	system("pause");
	return 0;	
}

這里的判斷條件為score,效果如圖

在這里插入圖片描述

多個(gè)判斷條件(以?xún)蓚€(gè)為例)

還是以上的代碼,只要把cmp函數(shù)稍做修改就可以了。這里我們的第二給判斷條件為num.

bool cmp(cj a,cj b)
{
	if(a.score!=b.score)
	return a.score>b.score;
	else
	return a.num>b.num;
}

效果如圖

在這里插入圖片描述

有更多條件也可以仿照兩個(gè)條件的進(jìn)行修改,要強(qiáng)調(diào)的是,多個(gè)條件中,越靠前的所起作用越大。

這里對(duì)于初學(xué)者不一定要懂為什么要這樣寫(xiě),只需要會(huì)用就好了。等到熟練之時(shí)可以再找資料更深層次地理解。有什么問(wèn)題歡迎在評(píng)論區(qū)與我交流。

C++結(jié)構(gòu)體自定義排序

聲明:本機(jī)無(wú)C++環(huán)境,以下代碼均沒(méi)有編譯測(cè)試,最近golang寫(xiě)的比較多,語(yǔ)法可能會(huì)有問(wèn)題,請(qǐng)自行測(cè)試代碼

sort排序函數(shù)簡(jiǎn)單使用 

#include <bits/stdc++.h>
using namespace std;
int a[100];
bool cmp1(int x,int y) {
	return x > y;
}
bool cmp2(int x,int y) {
	return x < y;
}
int main()
{
	//sort簡(jiǎn)單用法
	int n;
	scanf("%d",&n);
	/*
	1到n輸入
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	sort(a+1,a+1+n); //默認(rèn)從小到大排序
	*/
	/*
	0 到 n-1 輸入 
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	sort(a,a+n);
	*/
	//從大到小排序需要寫(xiě)自定義優(yōu)先級(jí)函數(shù)
	sort(a,a+n,cmp1); //采用cmp1函數(shù)排序 從大到小
	sort(a,a+n,cmp2); //采用cmp2函數(shù)排序 從小到大
   return 0;
}

結(jié)構(gòu)體的自定義排序

例如 對(duì)于時(shí)間排序 年月日

#include <bits/stdc++.h>
using namespace std;
/*
//結(jié)構(gòu)體排序兩種寫(xiě)法 寫(xiě)法1 結(jié)構(gòu)體內(nèi)部 重載<運(yùn)算符
struct node {
	int year,month,day;
	node() {year=0,month=0,day=0;}
	node(int y,int m,int d) { year=y,month=m,day=d;}
	bool operator< (const node &p) const { //重載<函數(shù) 內(nèi)部寫(xiě)小于邏輯
		if (year == p.year && month == p.month) {
			return day < p.day;
		}
		if (year == p.year) {
			return year < p.year;
		}
		return year < p.year;
	}
};
//寫(xiě)法2 定義結(jié)構(gòu)體后 寫(xiě)自定義排序函數(shù)
struct node {
	int year,month,day;
	node() {year=0,month=0,day=0;}
	node(int y,int m,int d) { year=y,month=m,day=d;}
};
bool cmp(const node &p,const node &q) { //語(yǔ)句不同 實(shí)現(xiàn)排序效果同方法1 const不可省略
	if (p.year != q.year) return p.year < q.year;
	if (p.month != q.month) return p.month < q.month;
	return p.day < q.day;
}
*/
node t[100];
int main()
{
	t[0] = node{2019,1,20};
	t[1] = node{2019,1,22};
	t[2] = node{2018,2,1};
	t[3] = node{2020,1,1};
	/* 方法1
	sort(t,t+4);
	方法2
	sort(t,t+4,cmp);
	*/
	for (int i=0;i<4;i++) {
	    printf("%d %d %d\n",t[i].year,t[i].month,t[i].day);
	}
   return 0;
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語(yǔ)言同名標(biāo)靶點(diǎn)自動(dòng)匹配算法實(shí)現(xiàn)實(shí)例代碼

    c語(yǔ)言同名標(biāo)靶點(diǎn)自動(dòng)匹配算法實(shí)現(xiàn)實(shí)例代碼

    這篇文章主要介紹了c語(yǔ)言同名標(biāo)靶點(diǎn)自動(dòng)匹配算法實(shí)現(xiàn)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C語(yǔ)言簡(jiǎn)易通訊錄的實(shí)現(xiàn)代碼

    C語(yǔ)言簡(jiǎn)易通訊錄的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)易通訊錄的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • c語(yǔ)言 兩字符串交叉合并實(shí)例

    c語(yǔ)言 兩字符串交叉合并實(shí)例

    今天小編就為大家分享一篇c語(yǔ)言 兩字符串交叉合并實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 深入解析C++編程中基類(lèi)與基類(lèi)的繼承的相關(guān)知識(shí)

    深入解析C++編程中基類(lèi)與基類(lèi)的繼承的相關(guān)知識(shí)

    這篇文章主要介紹了C++編程中基類(lèi)與基類(lèi)的繼承的相關(guān)知識(shí),包括多個(gè)基類(lèi)繼承與虛擬基類(lèi)等重要知識(shí),需要的朋友可以參考下
    2016-01-01
  • c++ vector 常用函數(shù)示例解析

    c++ vector 常用函數(shù)示例解析

    這篇文章主要介紹了c++ vector 常用函數(shù)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • CRC校驗(yàn)原理及其C語(yǔ)言實(shí)現(xiàn)詳解

    CRC校驗(yàn)原理及其C語(yǔ)言實(shí)現(xiàn)詳解

    循環(huán)冗余校驗(yàn)(Cyclic?Redundancy?Check,?CRC)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或計(jì)算機(jī)文件等數(shù)據(jù)產(chǎn)生簡(jiǎn)短固定位數(shù)校驗(yàn)碼的一種信道編碼技術(shù)。本文主要介紹了CRC校驗(yàn)原理及其C語(yǔ)言實(shí)現(xiàn),感興趣的可以了解一下
    2023-03-03
  • C++如何將字符串顛倒輸出

    C++如何將字符串顛倒輸出

    這篇文章主要介紹了C++如何將字符串顛倒輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • opencv 做人臉識(shí)別 opencv 人臉匹配分析

    opencv 做人臉識(shí)別 opencv 人臉匹配分析

    opencv 人臉識(shí)別通過(guò)級(jí)聯(lián)分類(lèi)器對(duì)特征的分級(jí)篩選來(lái)確定是否是人臉,每個(gè)節(jié)點(diǎn)的正確識(shí)別率很高,但正確拒絕率很低,任一節(jié)點(diǎn)判斷沒(méi)有人臉特征則結(jié)束運(yùn)算,宣布不是人臉
    2012-11-11
  • C++左值和右值學(xué)習(xí)筆記

    C++左值和右值學(xué)習(xí)筆記

    這篇文章主要為大家介紹了C++左值和右值學(xué)習(xí)筆記的重點(diǎn)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 一文搞懂Codec2框架解析

    一文搞懂Codec2框架解析

    這篇文章主要介紹了Codec2框架解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論