2

ブースト ライブラリ (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() のテストはすべてパスしました。

4

1 に答える 1

0

おそらく unordered_multimap を使用してみてください。等しいキーが原因で一部の挿入が失敗する可能性があります。それからカウントは一致しません。

于 2011-06-30T18:14:00.020 に答える