多次元ベクトルを使用して多次元ヒストグラムを作成しようとしていますが、事前に次元サイズがわかりません。C ++でこれを行う方法についてのアイデアはありますか?
ムスタファ
多次元ベクトルを使用して多次元ヒストグラムを作成しようとしていますが、事前に次元サイズがわかりません。C ++でこれを行う方法についてのアイデアはありますか?
ムスタファ
独自のクラスを作成します。まず、次のようなものが必要になるでしょう。
class MultiDimVector
{
std::vector<int> myDims;
std::vector<double> myData;
public:
MultiDimVector( std::vector<int> dims )
: myDims( dims )
, myData( std::accumulate(
dims.begin(), dims.end(), 1.0, std::multiplies<int>() )
{
}
};
インデックスを作成するには、インデックスとして an を取得し、std::vector<int>
自分で計算する必要があります。基本的には次のようなものです:
int MultiDimVector::calculateIndex(
std::vector<int> const& indexes ) const
{
int results = 0;
assert( indexes.size() == myDims.size() );
for ( int i = 0; i != indexes.size(); ++ i ) {
assert( indexes[i] < myDims[i] );
results = myDims[i] * results + indexes[i];
}
return results;
}
次のようにstd::vectorを使用できます。
std::vector<std::vector<yourType> >
(または、フレームワークを使用している場合は、そのドキュメントを検索して、より統合された配列の置き換えを見つけることができます;))