0

ファイルストリームを使用すると、ファイルの行を反復処理できます。コンマやスペースなどで行を分割する場合、通常はこの結果のベクトルを別のコンテナーに追加します。

結果はVector< Vector<String> >(またはコンテナーのフレーバー) になる可能性があります。

これを aQTableViewを使用してに渡すQAbstractTableModelと、行と列が反転します。外側のコンテナーは実際には行を表し、内側のコンテナーは列を表します。

データを表示し、いくつかの編集アクション (モデルの編集) を許可してから、比較可能なファイルに書き出したいので、どうすればよいかわかりません。

私のデータは約 200,000 行 (人) x 300 列 (値) になり、実際にはファイルからベクトルに読み込むのは遅くなりますが、マトリックスを反転して読み込むと、より速く表示されます。別のファイルに書き込む場合、転置されたベクトルを書き出すのは、次のような通常の方法に比べて簡単ではありません。QTableView

for (int iter = 0; ....; ...)
{
    row = matrix[iter].join(" ")
    file.write(row)
}

明らかな何かが欠けていますか?反転して表示する必要があります。モデルをビューに接続するとき、転置する必要がありますか、それとも元々逆の方法でマトリックスを埋める必要がありますか?

4

1 に答える 1

0

データ構造を再検討することをお勧めします。キャッシュの一貫性の観点からは、次のようにする方がはるかに優れています。

struct Line {
    QString str;
    QVector<short> splitPoints; // 2 points per each substring (begin, length)
};

struct File {
    QVector<Line> lines;
}

Lineもちろん、便利な演算子などを含むの本格的な実装が必要ですが、これでアイデアが得られます。から定数文字列を返すときは、コピーを避けるためLineに使用する必要があります。QStringRef

于 2013-09-06T19:34:55.347 に答える