对vector中的数据排序

要求:从文件fin中读取数据,每行的格式如"王明 85",代表"姓名 成绩",具体有多少行不确定。按成绩从大到小排序,将结果写入文件fout.

/*功能:从文件fin中读取"name grade",并按照grade从大到小排序经验:操作vector也可以像操作普通数组一样操作(使用下标),前提是没有结点的删除或增加
*/
#include <stdio.h>
#include <iostream>
#include <vector>using namespace std;typedef struct
{char name[20];int grade;
}Node;vector<Node>::iterator searchMax(vector<Node> &v)		// 返回vector中grade最大的结点
{vector<Node>::iterator ret = (vector<Node>::iterator)NULL;if(v.size() > 0){ret = v.begin();for(vector<Node>::iterator it = ret + 1; it != v.end(); it++){if(ret->grade < it->grade)ret = it;}}return ret;
}void display(vector<Node> &v)
{for(vector<Node>::iterator it = v.begin(); it != v.end(); it++){printf("%d ", it->grade);}printf("\n");
}void swap(Node * p1, Node *p2)		// 交换两个结点的值
{Node t;t = *p1;*p1 = *p2;*p2 = t;
}void bubbleSort(vector<Node> &v)	// vector像使用普通数组一样使用
{int i, j, len;int flag;len = v.size();for(i = 0; i < len; i++){flag = 0;for(j = 0; j < len - i - 1; j++){if(v[j].grade < v[j+1].grade){flag = 1;swap(&v[j], &v[j+1]);	// 交换两结点值}}if(!flag)						// 本轮未交换过元素值,表明已有序break;display(v);printf("*****************************************\n");}
}void writeVector(FILE *fout, vector<Node> &v)
{for(vector<Node>::iterator it = v.begin(); it != v.end(); it++){fprintf(fout, "%s %d\n", it->name, it->grade);}
}int main(int argc, char **argv)
{char fin[] = "a.txt";char fout[] = "a_out.txt";FILE *fp1, *fp2;vector<Node> v;fp1 = fopen(fin, "r");fp2 = fopen(fout, "w");if(fp1 == NULL || fp2 == NULL){printf("Open file error!\n");return 1;}// 从文件读取数据Node node;while(fscanf(fp1, "%s %d\n", node.name, &node.grade) == 2)v.push_back(node);fclose(fp1);display(v);		// 显示读取的数据// 方法一:调用bubbleSort()printf("----------------------------------------------------\n");	bubbleSort(v);printf("====================================================\n");display(v);writeVector(fp2, v);// 方法二:通过searchMax()
/*	vector<Node>::iterator max = (vector<Node>::iterator)NULL;while(v.size() > 0){max = searchMax(v);if(max == (vector<Node>::iterator)NULL)break;fprintf(fp2, "%s %d\n", max->name, max->grade);v.erase(max);}*/fclose(fp2);return 0;
}

结论:对vector排序,可像操作数组一样方便的操作。前提是没有结点的增、删。


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

另附:整数数组选择排序算法:

void disp(int a[], int len)
{int i = 0;for(; i < len; i++){printf("%d ", a[i]);}printf("\n");
}void selectSort(int a[], int len)       // 选择排序
{int i, j, k, t;for(i = 0; i < len; i++){k = i;for(j = i+1; j < len; j++){if(a[j] > a[k])k = j;                          // k指向最大值}if(k != i){t = a[i];a[i] = a[k];a[k] = t;}elsecontinue;for(j = 0; j < i; j++)printf("|  ");disp(a+i, len-i);}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVa 11059 Maximum Product

题意&#xff1a;给出n个数组成的序列&#xff0c;求乘积最大的连续子序列 看的紫书&#xff0c;因为n最大为18&#xff0c;每个数最大为10,所以10^18用long long 能够存下&#xff0c; 直接枚举起点和终点找最大值就可以了 1 #include<iostream> 2 #include<cstdio&…

python 高维数据_用Sci-kit learn和XGBoost进行多类分类:Brainwave数据案例研究

在机器学习中&#xff0c;高维数据的分类问题非常具有挑战性。有时候&#xff0c;非常简单的问题会因为这个“维度诅咒”问题变得非常复杂。在本文中&#xff0c;我们将了解不同分类器的准确性和性能是如何变化的。理解数据对于本文&#xff0c;我们将使用Kaggle的“EEG Brainw…

缔造完美运维 共谱双赢新篇

国华电力早在许久之前就曾经使用北塔网络监控产品&#xff0c;但由于当前国华电力信息中心的网络管理系统呈分散状态&#xff0c;其范围也非常有限&#xff0c;致使无法全面了解国华电力客户信息网中计算机及网络系统的实时运行状况&#xff0c;对网络资源配置及网络流量分布也…

Android 底部导航 UI框架

此版本在“一个不错的UI框架”基础上修改了首次启动底部导航没有选中Tab的情况 运行效果图如下&#xff1a; 1、TabView.java 这里修改的是mState-1 /********************************************************************************* Copyright (c) Weaver Info Tech Co. …

Windows在当前目录(文件)打开cmd窗口

将下面的内容保存到一个.reg文件&#xff0c;再双击运行即可。 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\cmdhere] "Cmd&Here"[HKEY_CLASSES_ROOT\*\shell\cmdhere\command] "cmd.exe /c start cmd.exe /k pushd \"%L\\..\&qu…

ceontos7安装mysql5.5_centos7 安装mysql5.7及配置

一、Mysql 各个版本区别&#xff1a;1、MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。2、MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;可以试用30天。3、MySQL Cluster 集群版&#xff0c;开源免费。可将几个M…

linux编译源码问题 环境变量的设置

本来想安装一个gkrellm-2.3.2&#xff0c;解压进去后,执行./configure&#xff0c;出现这个情况。如图1大概的意思是gtk-2.0未安装吧。然后我下载了一个gtk-2.0&#xff0c;执行./configure&#xff0c;出现这种情况。如图2大概的意思是说&#xff0c;这glib-2.0,atk,pango,cai…

UML——概述

1. 静态视图&#xff08;类图&#xff09; 静态视图不描述与时间相关的系统行为&#xff0c;这种行为在其他视图中描述&#xff0c;因此称之为静态试图。静态视图用类图来实现&#xff0c;正因为它以类图为中心&#xff0c;因此也称之为类图。在类图中类用矩形框表示&#xff0…

QT中文乱码总结

在写一个非常简单的QT源程序时遇到了中文乱码问题&#xff0c;所以上网搜索得到了还算比较满意的答案。 From: http://www.ctogo.net/313.html WOWCode的主体部分基本已经完成了&#xff0c;对于我自己来说&#xff0c;其实已经足以应付我的需要了&#xff0c;不过如果发布的话…

mysql batis传多个参数_Mybatis传多个参数(三种解决方案)

据我目前接触到的传多个参数的方案有三种。第一种方案DAO层的函数方法Public User selectUser(String name,String area);对应的Mapper.xmlselect * from user_user_t where user_name #{0} and user_area#{1}其中&#xff0c;#{0}代表接收的是dao层中的第一个参数&#xff0c…

78%的iPhone用户手机没有安装过新软件

78%的iPhone用户手机没有安装过新软件 最近一直在做手机的研究&#xff0c;也在观察用户的行为习惯。在众多的智能手机中&#xff0c;iphone的强大是自然的&#xff0c;这是一款把用户从2G时代&#xff0c;带到3G时代的手机。它的革命性是显而易见的&#xff0c;我的观察是用户…

Decorator模式

Decorator(装饰器)模式能够像标准的继承一样为类添加新的功能。 不同于标准继承机制的是,如果对象进行了实例化,Decorator模式能够在运行时动态地为对象添加新的功能。 <?php abstract class AbstractCar{public abstract function getPrice();public abstract function g…

fetch 之GET请求带参数

fetch 之GET请求带参数

mysql受影响的行 0_为什么更新/删除成功时受影响的行返回0?

我有声明&#xff1a;INSERT INTO infotbl(name, phone) VALUES(Alex, 9999999);并更新它&#xff1a;UPDATE infotbl SET name Alex Johnes, phone 999 34356063 WHERE id 1;然后删除&#xff1a;DELETE FROM infotbl WHERE id 1;当我在MySQL中更新和删除行时,我已成功插入…

手把手教你封装一个ant design的审核框组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣学习前端知识 这边先上代码 然后我们逐个解释 import React, { Component, Fragment } from react; import { Modal, Row, Form, Col, Radio, Tag, Input, message } from antd;/*** 弹框 审核* param {String…