質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

C++におけるCSVファイルの読み込みの高速化

k.s.t
k.s.t

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

4回答

0評価

1クリップ

1998閲覧

投稿2020/12/19 11:36

前提・実現したいこと

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;

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。