前言(废话)
byd,CSDN上消失了一个月,现在终于回归了
中间跑去做大作业了(虽然中间水了两周),还有一堆破事,转专业,竞赛啥的
嘛,这是最后的成果:
外排序部分很快就写完了,后面的画图和gui设计搞了我好久(毕竟第一次接触)
大作业的要求:
1.对股票数据进行排序 (必须使用外排序,用于排序的内存大小限制为32MB,此限制的检查,需要通过资源管理器展现。)
嘛,简单,我是参考了这篇文章:
【外排序】外排序算法(磁盘排序、磁带排序) 外存设备结构分析 败者树多路归并 最佳归并树白话讲解-CSDN博客
在知道是归并排序之后就开干了,其中对文件进行归并的时候用上了STL的priority_queue,后面老师又介绍了最小堆,这两个都可以,先不论效率咋样,直接使用现成的priority_queue是更加方便的
2.创建索引,加快数据访问
索引的创建直接使用文件输入输出把索引放在一个文件里面就行了,这个可以在外排序的过程中进行。
为了加快索引的访问,我是创建了一个索引类来读取文件里面的索引来将索引放在内存的
可以看看我的索引类的声明:
struct index{
char code[codeL];
int YM;
index(){}
index(char * tmp, int YM):YM(YM){memcpy(code, tmp, codeL);}
bool operator<(const index tmp)const;
bool operator!=(const index tmp)const;
bool operator==(const index tmp)const;
};//为索引类使用的结构
class Index{
private:
bool is_build;
std::map<index, long> m;
public:
Index(){is_build = false;}
void build(void);
long get_index(const index &tmp){return m[tmp];}
long get_next_index(const index &tmp);
bool is_index_existed(const index &tmp);
QStringList get_all_code(void);//给出所有的股票代码
QStringList get_all_code(const int YM);//根据年月给出对应的股票代码
QStringList get_all_month(void);//给出所有的年月
QStringList get_all_month(const char str[codeL]);//根据股票代码给出对应的年月
};//索引类
其中map是STL的map,即映射
3.对股票价格进行可视化
来了,最难的部分
为什么我说最难?因为这玩意我根本不了解,byd,老师不教你,网络上的描述不清不楚,我当时还以为是要扔到主函数来使用。还有那个qcustomplot,byd对qt版本还有要求(刚开始没看到),给qt换版本都遇到一堆问题,nnd qtcreator6.0以上的版本用using namespace std;还会出bug,看着那一个又一个的error,感觉都要寄了
不过最后是成功克服
先说说qcustomplot的部署吧:
Qt Plotting Widget QCustomPlot - Setting Up
这是官网,最新版本的qcustomplot要求qt版本不高于6.4(现在最新的基本都是6.7,6.8),里面也有教程,简单说就是把qcustomplot.cpp和.h下下来,扔到工程文件夹,让.pro添加这两个现有文件就行了,其中qt6.0以上的还要改.pro文件里面的一行,以及提升widget类(具体看里面教程)
(qcustomplot是用来画图的)
然后是qt版本的改变:
希望被虐的可以网络上找镜像下载5.15以下的离线安装包,然后用qt手动添加(太痛苦了)
当然这边有比较简单的办法:
先Win+R,然后输入cmd后回车
定位到你放qt的文件夹(这是我的文件夹,其中框出来的文件是要改qt版本的文件):
方法: