C ++,boost :: numeric :: ublas :: mapped_matrix - 使用std :: tr1 :: unordered_map而不是std :: map时的迭代问题

时间:2011-02-11 10:29:50

标签: c++ boost ublas

我正在使用boost库(1.44)和VC ++ 2010。

我在下面的代码中发现了一些问题,

using namespace boost::numeric;
typedef double value_type;

typedef ublas::mapped_matrix<value_type> StorageMap;
typedef ublas::mapped_matrix<value_type, ublas::row_major, std::tr1::unordered_map<size_t, value_type> > StorageUnorderedMap;

StorageMap mat; //<== (1) 
//StorageUnorderedMap mat; //<== (2)

//Looping over non-zero elements of sparse matrix.
size_t numElemLoop= 0;
for(auto it1= mat.begin1(); it1 != mat.end1(); ++it1)
{
    for(auto it2= it1.begin(); it2 != it1.end(); ++it2)
    ++numElemLoop;
}

assert(mat.nnz() == numElemLoop); //<== (3)

此测试仅针对使用std :: tr1 :: unordered_map的StorageUnorderedMap失败。 但是insert_element()和find_element()测试都通过了。

1 个答案:

答案 0 :(得分:0)

也许尝试使用unordered_multimap。由于密钥相等,可能会导致某些插入失败。然后计数将不匹配。