Самый быстрый способ получить данные из CSV в C ++

У меня есть большой CSV (примерно 75 МБ) такого типа:

1,2,4
5,2,0
1,6,3
8,3,1
...

И я храню свои данные с этим кодом:

#include <sstream>
#include <fstream>
#include <vector>

int main()
{
    char c; // to eat the commas

    int x, y, z;
    std::vector<int> xv, yv, zv;

    std::ifstream file("data.csv");
    std::string line;

    while (std::getline(file, line)) {
        std::istringstream ss(line);
        ss >> x >> c >> y >> c >> z;
        xv.push_back(x);
        yv.push_back(y);
        zv.push_back(z);
    }

    return 0;
}

И это меня раздражает в этом большом CSV (~ 75 МБ):

real        0m7.389s
user        0m7.232s
sys         0m0.132s

Это так много!

Недавно, используя фрагмент возвышенного текста, я нашел другой способ прочитать файл:

#include <iostream>
#include <vector>
#include <cstdio>

int main()
{
    std::vector<char> v;

    if (FILE *fp = fopen("data.csv", "r")) {
        char buf[1024];
        while (size_t len = fread(buf, 1, sizeof(buf), fp))
            v.insert(v.end(), buf, buf + len);
        fclose(fp);
    }
}

И это меня раздражает (без получения данных) в этом большом CSV (~ 75 МБ):

real        0m0.118s
user        0m0.036s
sys         0m0.080s

Это огромная разница во времени!

Вопрос в том, как мне быстрее получить данные в 3 векторах в векторе символов! Я не знаю, как я могу сделать это быстрее, чем первый предложенный.

Большое спасибо! ^^

Ответы на вопрос(1)

Ваш ответ на вопрос