C++中, 结构体 vector 使用 sort排序

118 篇文章 8 订阅

qvector 结构体排序_c++实现成绩排序

C++中, 结构体 vector 使用 sort排序

QVector容器内元素排序和去重简单用法(sort、vector、unique、erase)

QVector排序

============================

qvector 结构体排序_c++实现成绩排序

    成绩排序是常有的需求,现在就来用c++实现一下 (简洁开场)

/1.需求/

    1.输入的第一行数据是学生的总数n,正整数,不会超过int的范围。

    2.接下来n行格式是:学生名称 学生语文成绩 学生数学成绩 学生英语成绩

    3.输出有n行,格式是:排名 学生名 学生总成绩

    4.输出按排名升序排列,排名根据总成绩计算。

    我们来分析一下这个需求,首先储存数据我们肯定需要数组,而这个数组的长度不定,需要让用户来定义,学生名称、学生成绩的数据类型不同,需要一个“可以同时盛放多个类型的复合类型”,排序就根据我们之前讲过的冒泡排序来排序。

/2.让用户定义长度的数组/

    之前讲过普通数组的定义方式:

类型 名称[长度] = {元素1,元素2...}

    有些时候,长度是一个不确定的值,这时候我们就需要使用变长数组来实现,注意,像下面的第二条语句是非法的:

类型 * 名称 = new 类型[不确定长度]  // 类型 名称[不确定长度] = {...}使用数组delete[] 名称

        new用于申请一些内存空间并返回他们的地址,*代表指针,它指向这块地址,注意!new必须和delete配对!

    我们先定义一个用于存放学生数据的可变长数组:

#include using namespace std;int main(){  int n;  cin >> n;  ??? * stu = new ???[n];  delete[] stu;  return 0;}

    由于???这个数据类型必须要能储存多种类型的数据,所以我们要学习一种新的数据结构——结构体。

/3.结构体/

    结构体的定义简直不要太简单:

struct 结构体名{    数据类型 数据名;    数据类型 数据名;    ...};

    比如需要一个student结构体就可以这样定义:

struct student{ 

    string name; 

    int chinese; 

    int math; 

    int english;

};

    里面可以储存int类型的三个成绩和string类型的名字。

    string类型和char[]类型一样,都表示字符串,不过string包含在string头文件里且没有长度限制。

    那么如何创建一个结构体变量呢?很简单:

结构体名 变量名 = {数据1,数据2,数据3...};

    比如给student创建一个变量piggy,name为piggy,三门分数全部为100be5762f36341bc73646a30a0358bb55c.png:

student piggy = {"piggy",100,100,100};

    那么如何访问结构体里的数据呢?很简单,只需要用成员操作符 . 就可以了:

cout << piggy.name << ' '       << piggy.chinese  << ' '       << piggy.math << ' '       << piggy.english;

    这样就输出:

piggy 100 100 100

    记住,定义了一个结构体之后,要是使用这个结构体,就把这个结构体的名字当成一个类型就好了,定义结构体数组的格式如下:

普通数组:结构体名 名称[长度] = {{数据1,数据2,数据3...},{数据1,数据2,数据3...}...}变长数组:结构体名 * 名称 = new 结构体名[不确定长度]

    这样就可以把上面的问号补充完整了:

student * stu = new student[n];

/4.逐个读取数据/

  int n;  cin >> n;  student * stu = new student[n];  string na;  int c,m,e;  for (int i=0;i    cin >> na >> c >> m >> e;    stu[i].name = na;    stu[i].chinese = c;    stu[i].math = m;    stu[i].english = e;  }

    在8-11行,我们动态更改了结构体(数组里的结构体)变量,格式如下:

结构体(数组里的结构体)变量名.属性名 = 值

/5.排序数据/

    根据我们之前讲到过的算法,写出排序代码:

for (int i = 0;i-1;i++){

    for (int j=0;j-1);j++){

      if (stu[j].chinese + stu[j].math + stu[j].english < stu[j+1].chinese + stu[j+1].math + stu[j+1].english){

        student tmp=stu[j];

        stu[j]=stu[j+1];

        stu[j+1]=tmp;     

}    }  }

    接下来输入数据会输出相应排名827bf9af0fa1f62855791582aea17182.png:

015b93750258e56ba7f2fcfbed48ba63.png


————————————————
版权声明:本文为CSDN博主「weixin_39534978」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39534978/article/details/111295659

C++中, 结构体 vector 使用 sort排序

QVector容器内元素排序和去重简单用法(sort、vector、unique、erase)

本文主要总结给Qt的QVector容器内元素排序和去重,下面是关键函数总结。
1.1核心函数讲解

Qt中的QVector容器用法跟STL中的vector容器基本一样。本文是先建立一个容器,然后随机填充十个0-5内整数,接着用算法对QVetor容器内的元素进行排序和去重。

其中,算法的关键是先对容器元素进行排序才能去重。排序用STL的sort()函数,去重用STL的unique()函数和erase()两个函数搭配使用。

算法步骤总结如下:

a1 用sort函数排序;

a2 用unique函数进行去重,unique函数返回容器中重复元素的迭代器的首地址iter;

a3 配合erase函数,擦除iter首地址,终点是容器末尾arr.end。

。。。。。。省略。。。。。。


————————————————
版权声明:本文为CSDN博主「三公子Tjq」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/naibozhuan3744/article/details/98883143

QVector排序

QVector<double> tempX ;
qSort(tempX.begin(), tempX.end());//从小到大排序

转载于:https://www.cnblogs.com/judes/p/9301614.html

Qt---QVector排序

Qt QVector排序,也可以用于其他类型

以QVector为例


必须包含

#include <QtAlgorithms>

QVector<double>,y(RAWDATA_NUM);

qSort(y.begin(),y.end());//从小到大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值