私は、疎圧縮列形式のデータ構造を持っています。私の指定されたアルゴリズムについてはstd :: for_eachのベクトル位置を渡す
、私はデータの「列」内のすべての値を反復処理し、原料の束を行う必要があります。現在、通常のforループを使用してうまく動作しています。上司は、これを将来の並列化のためのfor_eachループとして再コーディングしたいと思っています。スパース圧縮カラムに精通していないものについて
、データを表すために2(または3)ベクターを用います。 1つのベクトルは値の長いリストです。 2番目のベクトルは、各列の開始位置のインデックスです。
現在のバージョン //列5のデータを処理中。 ベクトル値。 ベクトルcolIndex; ベクトルrowIndex;
int column = 5;
for(int i = conIndex[5]; i != colIndex[6]; i++){
value = values[i];
row = rowIndex[i];
// do stuff
}
キーは、私は、行の位置(そして、私はここに一覧表示するには悩まないよ、他の原料の束をルックアップするために、私の値の列に(整数として)場所を知っておく必要があるということです。)
私がのstd :: for_each()関数を使用している場合は、私は位置ではなく、位置の値を取得します。私は自分自身の位置が必要です。
一つの思想、と明らかに効率的ではないが、整数私のデータと同じ長さのベクトルを作成することです。そうすれば、私はそのダミーベクトルを介してfor_eachの関数にイテレータを渡すことができ、私の関数に渡される値はその位置になります。しかし、これは最も効率の悪い方法のようです。
どのような考えですか?
私の挑戦は、ポジションをベクターで知る必要があることです。 for_eachはイテレータを受け取り、そのイテレータの値を関数に送ります。