前提・実現したいこと
C++でCSV形式のファイルの読み込みを行いたいです。
ファイルの中身は下記のように各行に合計で5つの数字をカンマ区切りで並べており、全部で300万行ほどのデータが並んでいるファイルになります。イタリックテキスト
2130414,2009,1444,1914,1075
下記のようなコードで実装をしたのですが読み込みに5分ほどかかってしまうため、高速化をしたいと考えています。
アドバイスよろしくお願いします。
該当のソースコード
C++
#include <iostream> #include <fstream> #include <sstream> #include <string> #include <istream> #include <vector> #include <unordered_map> #include <algorithm> using namespace std; struct C2P { int cx; int cy; int px; int py; C2P(int camera_x, int camera_y, int proj_x, int proj_y) { cx = camera_x; cy = camera_y; px = proj_x; py = proj_y; } C2P() { cx = 0; cy = 0; px = 0; py = 0; }; }; // // split関数の定義 // vector<string> split(string& input, char delimiter) { istringstream stream(input); string field; vector<string> result; while (getline(stream, field, delimiter)) { result.push_back(field); } return result; } // // main関数 // int main() { // // データの読み込み // unordered_multimap<int, C2P> c2p; ifstream ifs("c2pMap.csv"); string line; while (getline(ifs, line)) { vector<string> strvec = split(line, ','); int key = stoi(strvec[0]); int cx = stoi(strvec[1]); int cy = stoi(strvec[2]); int px = stoi(strvec[3]); int py = stoi(strvec[4]); c2p.insert(make_pair(key, C2P(cx, cy, px, py))); } return 0;
まだ回答がついていません
会員登録して回答してみよう