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

假设我们有两个region_prior_integral_image实例:A 和 B。如果要将 B 分配给 A,like ,和A = B;的形状必须相等。错误消息是说,在您的代码中,两个数组的形状不同。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,会调用默认构造函数。所以这两个形状不匹配。

我的意见是region_prior_integral_image在你的代码中存储指针,这也将节省大量的副本。

于 2012-11-13T10:33:13.647 回答