前提・実現したいこと
C++でCSV形式のファイルの読み込みを行いたいです。
ファイルの中身は下記のように各行に合計で5つの数字をカンマ区切りで並べており、全部で300万行ほどのデータが並んでいるファイルになります。イタリックテキスト
2130414,2009,1444,1914,1075
下記のようなコードで実装をしたのですが読み込みに5分ほどかかってしまうため、高速化をしたいと考えています。
アドバイスよろしくお願いします。
該当のソースコード
C++
1#include <iostream> 2#include <fstream> 3#include <sstream> 4#include <string> 5#include <istream> 6#include <vector> 7#include <unordered_map> 8#include <algorithm> 9 10using namespace std; 11 12struct C2P 13{ 14 int cx; 15 int cy; 16 int px; 17 int py; 18 19 C2P(int camera_x, int camera_y, int proj_x, int proj_y) 20 { 21 cx = camera_x; 22 cy = camera_y; 23 px = proj_x; 24 py = proj_y; 25 } 26 C2P() 27 { 28 cx = 0; 29 cy = 0; 30 px = 0; 31 py = 0; 32 33 }; 34 35}; 36 37// 38// split関数の定義 39// 40vector<string> split(string& input, char delimiter) 41{ 42 istringstream stream(input); 43 string field; 44 vector<string> result; 45 while (getline(stream, field, delimiter)) 46 { 47 result.push_back(field); 48 } 49 return result; 50} 51 52// 53// main関数 54// 55int main() 56{ 57 // 58 // データの読み込み 59 // 60 unordered_multimap<int, C2P> c2p; 61 ifstream ifs("c2pMap.csv"); 62 string line; 63 while (getline(ifs, line)) 64 { 65 vector<string> strvec = split(line, ','); 66 int key = stoi(strvec[0]); 67 int cx = stoi(strvec[1]); 68 int cy = stoi(strvec[2]); 69 int px = stoi(strvec[3]); 70 int py = stoi(strvec[4]); 71 72 73 c2p.insert(make_pair(key, C2P(cx, cy, px, py))); 74 75 76 } 77 return 0;
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/20 04:57
2020/12/20 05:02
2020/12/20 06:18
2020/12/20 07:08