您好我有一些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>]: Assertion
std :: equal(other.shape(),other.shape()+ this-&gt; num_dimensions(),this-&gt; shape()) '失败了。
我不知道为什么?
我知道我可以使用矢量,但为了论证,我想说我想要一个region_prior_integral_images数组
由于
答案 0 :(得分:1)
假设我们有两个region_prior_integral_image
个实例:A和B.如果要将B分配给A,例如A = B;
,A
和B
的形状必须等于。错误消息是,在您的代码image_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
的指针,这样可以节省大量的副本。