2

私のバックグラウンドのほとんどは関数型プログラミング言語であったため、C++ についてはかなりの初心者です。

とにかく、私が取り組んでいる問題は、複数の変数タイプを持つ csv ファイルを解析していることです。データのサンプル行は次のようになります。

"2011-04-14 16:00:00, X, 1314.52, P, 812.1, 812"
"2011-04-14 16:01:00, X, 1316.32, P, 813.2, 813.1"
"2011-04-14 16:02:00, X, 1315.23, C, 811.2, 811.1"

だから私がやったことは、各行を格納する構造体を定義することです。次に、これらのそれぞれが std::vector< mystruct > に格納されます。ここで、このベクトルを列 4 で 2 つのベクトルにサブセット化するとします。ここで、P を含むすべての要素が一方にあり、C が他方にあります。

ここで示した例はかなり単純化されていますが、実際の問題には複数回のサブセット化が含まれます。

私の最初の素朴な実装は、ベクター全体を反復処理し、新しいベクターによって定義された個々のサブセットを作成してから、それらの新しく作成されたベクターをサブセット化するものでした。おそらく、もう少しメモリ効率の良い方法は、インデックスを作成して縮小することです。

ここで私の質問は、速度/メモリ使用量の点でより効率的な方法はありますか)、この std::vector< mystruct > フレームワークによって、またはこのタイプのものを処理するためのより良いデータ構造があるかどうかです。

ありがとう!

編集:

基本的に私が望む出力は、最初の2行と最後の行が別々です。もう 1 つの注目すべき点は、通常、データセットは例のように順序付けられていないため、C と P がグループ化されていないことです。

4

3 に答える 3

1

これにはstd::partitionを使用しました。ただし、ブーストの一部ではありません。

于 2013-04-03T18:34:44.130 に答える
0

異なるインスタンス間で要素を安価に移動できるデータ構造が必要な場合、探しているデータ構造は関数std::list<>splice()ファミリーです。

于 2013-04-03T18:36:19.667 に答える