0

こんにちは、以下のように定義されたいくつかの boost::multi_array があります。

typedef boost::multi_array<double, 3> region_prior_integral_image

region_prior_integral_image次のような配列を作成しようとしています。

unordered_map<string, int> filename_to_hash_key_map = get_filename_to_hash_key_map();

unordered_map<string, region_prior_integral_image> filename_to_region_prior_map = get_region_prior_integral_images();

region_prior_integral_image* image_cache = new region_prior_integral_image[5];
for(unordered_map<string, int>::iterator it = filename_to_hash_key_map.begin(); it != filename_to_hash_key_map.end(); it++){
    image_cache[it->second] = filename_to_region_prior_map[it->first];
}

ただし、プログラムは次のように終了しています: SemanticTextonForest: /home/aly/libs/boost_1_51_0/stage/include/boost/multi_array/multi_array_ref.hpp:488: boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::multi_array<double, 3ul>, T = double, long unsigned int NumDims = 3ul, boost::multi_array_ref<T, NumDims> = boost::multi_array_ref<double, 3ul>]: Assertionstd::equal(other.shape(),other.shape()+this->num_dimensions(), this->shape())' failed.`

そして、私には理由がわかりませんか?

ベクトルを使用できることはわかっていますが、引数のために、region_prior_integral_images の配列が必要だとしましょう。

ありがとう

4

1 に答える 1

1

A と B の2 つのregion_prior_integral_imageインスタンスがあるとします。 のように B を A に割り当てたい場合は、とA = B;の形状が等しくなければなりません。エラー メッセージは、コード内で 2 つの配列の形状が異なることを示しています。ABimage_cache[it->second] = filename_to_region_prior_map[it->first];

で配列をどのように作成しましたfilename_to_region_prior_mapか? このコンストラクターを使用して形状を指定したと思います: multi_array<double,3> B(boost::extents[i][j][k])。したがって、それらの形状は[i][j][k]です。ただし、 を作成するimage_cacheと、デフォルトのコンストラクターが呼び出されます。したがって、2 つの形状は一致しません。

私の意見では、ポインタをregion_prior_integral_imageコードに格納することで、多くのコピーも節約できます。

于 2012-11-13T10:33:13.647 に答える