2011-02-11 78 views
2

我使用boost库(1.44)和VC++ 2010.C++,boost :: numeric :: ublas :: mapped_matrix - 使用std :: tr1 :: unordered_map代替std :: map时的迭代问题

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

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) 

这个测试失败只有StorageUnorderedMap使用std :: tr1 :: unordered_map。 但insert_element()和find_element()测试全部通过。

+1

不可能告诉你的代码。你初始化一个空的`StorageMap`并循环它。 – pmr 2011-06-30 18:43:57

回答

0

也许尝试使用unordered_multimap。可能是因为有相同的密钥,一些插入失败。然后计数不匹配。