C++ 导入csv文件,然后使用c++;
我有一个项目,告诉我导入一个csv文件,然后对其进行排序(该文件包含数百万个数字)。我在谷歌上搜索了一个合并排序的源代码,找到了这个,我试过了,排序工作正常。(我在ubuntu中通过虚拟盒用g++编译了这段代码)C++ 导入csv文件,然后使用c++;,c++,csv,merge,mergesort,C++,Csv,Merge,Mergesort,我有一个项目,告诉我导入一个csv文件,然后对其进行排序(该文件包含数百万个数字)。我在谷歌上搜索了一个合并排序的源代码,找到了这个,我试过了,排序工作正常。(我在ubuntu中通过虚拟盒用g++编译了这段代码) #包括 #包括 使用名称空间std; 无效打印(矢量v) { 对于(int i=0;i0){ if((int)left.front()0){ 对于(int i=0;i0){ 对于(int i=0;i
#包括
#包括
使用名称空间std;
无效打印(矢量v)
{
对于(int i=0;i0){
if((int)left.front()0){
对于(int i=0;i<(int)left.size();i++)
结果:推回(左[i]);
打破
}else如果((int)right.size()>0){
对于(int i=0;i<(int)right.size();i++)
结果。向后推_(右[i]);
打破
}
}
返回结果;
}
向量合并排序(向量m)
{
如果(m.size()您的加载数据(“dataDemo.csv”)
调用没有写入以前声明的本地向量v;
。您的向量v
没有元素。您需要编写一个基于双数据[jumlahData]的内容填充向量v
的方法
即
intmain()
{
向量v;
loadData(“dataDemo.csv”);
用数据填充矢量(v,data);//要实现我吗
印刷品(五);
cout正如其他人所指出的,您没有对读取的实际数据进行排序。这可以通过返回您读取的数据点计数来轻松解决
一种更好的方法,我怀疑您正在尝试,就是将向量的引用从main发送到loadData
,并推回向量上的数据。此外,在可能的情况下,建议使用您提供的实现库。换句话说,不要重新发明轮子,只需使用
为您自己或他人的排序算法。它有助于防止讨厌的错误
int main()
{
//return the count of integers read into data[] in loadData()
//also change the vector & array types to be consistent, please!
std::vector<int> v (data, loadData("dataDemo.csv");
print(v); //print the loaded vector
cout << "------------------" << endl;
std::sort(v.begin(), v.end()); // using <algorithm> (̶i̶t̶'̶s̶ ̶q̶u̶i̶c̶k̶s̶o̶r̶t̶)̶
print(v);
}
intmain()
{
//返回读取loadData()中数据[]的整数计数
//请将向量和数组类型更改为一致!
std::vector v(数据,loadData(“dataDemo.csv”);
打印(v);//打印加载的向量
你能不能使用std::sort
。你的loadData
写入main::v
?…另外,对你的代码进行注释,这样我们就可以了解你的方向是什么。你的文件数据存储在全局数组double data[]
,而不是向量
。除了读取数组并复制到向量
,而不是直接读取向量
。如果,引用询问者[t]该文件包含数百万个数字,数组大小不到一百万,使用数组似乎是一个非常糟糕的主意。向询问者提供一点代码,用向量演示loadData
,并使用push_back
不会剥夺他们太多的教育。对不起,你能告诉我怎么做吗?我正在学习请稍等一下你的回答,但我不知道该写什么语法以及它应该放在哪里。谢谢你,先生。它实际上是快速排序YYYY…通常不是。现在它往往是一种叫做的东西。很抱歉,我忘了告诉你,我只允许在合并/遗传排序之间进行选择,所以我可以使用这种方法还是不可以?谢谢你。loadData
你使用计数器+++
来计算你读了多少个数字。我们在main
中构造的v
需要知道这一点,也需要知道data
在哪里,这就是为什么我要std::vector v(data,loadData(“dataDemo.csv”)请注意,我在构造函数中包含了函数调用,这意味着v
在loadData
返回count
变量后完成构造。
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
using namespace std;
const int jumlahData = 999999;
double data[jumlahData] = {0};
void loadData(const char* namaFile) {
string line;
ifstream myfile (namaFile);
if (myfile.is_open()) {
int counter = 0;
while (getline(myfile, line, ',')) {
//cout << line << '\n';
data[counter] = stod(line);
counter++;
}
myfile.close();
}
}
void print(vector<int> v)
{
for(int i = 0; i < v.size(); i++) cout << v[i] << " ";
cout << endl;
}
vector<int> merge(vector<int> left, vector<int> right)
{
vector<int> result;
while ((int)left.size() > 0 || (int)right.size() > 0) {
if ((int)left.size() > 0 && (int)right.size() > 0) {
if ((int)left.front() <= (int)right.front()) {
result.push_back((int)left.front());
left.erase(left.begin());
}
else {
result.push_back((int)right.front());
right.erase(right.begin());
}
} else if ((int)left.size() > 0) {
for (int i = 0; i < (int)left.size(); i++)
result.push_back(left[i]);
break;
} else if ((int)right.size() > 0) {
for (int i = 0; i < (int)right.size(); i++)
result.push_back(right[i]);
break;
}
}
return result;
}
vector<int> mergeSort(vector<int> m)
{
if (m.size() <= 1)
return m;
vector<int> left, right, result;
int middle = ((int)m.size()+ 1) / 2;
for (int i = 0; i < middle; i++) {
left.push_back(m[i]);
}
for (int i = middle; i < (int)m.size(); i++) {
right.push_back(m[i]);
}
left = mergeSort(left);
right = mergeSort(right);
result = merge(left, right);
return result;
}
int main()
{
vector<int> v;
loadData("dataDemo.csv");
print(v);
cout << "------------------" << endl;
v = mergeSort(v);
print(v);
}
int main()
{
vector<int> v;
loadData("dataDemo.csv");
populateVectorWithData(v, data); //TODO implement me
print(v);
cout << "------------------" << endl;
v = mergeSort(v);
print(v);
}
int main()
{
//return the count of integers read into data[] in loadData()
//also change the vector & array types to be consistent, please!
std::vector<int> v (data, loadData("dataDemo.csv");
print(v); //print the loaded vector
cout << "------------------" << endl;
std::sort(v.begin(), v.end()); // using <algorithm> (̶i̶t̶'̶s̶ ̶q̶u̶i̶c̶k̶s̶o̶r̶t̶)̶
print(v);
}