Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 导入csv文件,然后使用c++;_C++_Csv_Merge_Mergesort - Fatal编程技术网

C++ 导入csv文件,然后使用c++;

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

我有一个项目,告诉我导入一个csv文件,然后对其进行排序(该文件包含数百万个数字)。我在谷歌上搜索了一个合并排序的源代码,找到了这个,我试过了,排序工作正常。(我在ubuntu中通过虚拟盒用g++编译了这段代码)

#包括
#包括
使用名称空间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);
}