C ++, boost :: numeric :: ublas :: mapped_matrix - итерационная проблема при использовании std :: tr1 :: unordered_map вместо std :: map - PullRequest
2 голосов
/ 11 февраля 2011

Я использую библиотеку наддува (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)

Этот тест не прошел только для StorageUnorderedMap с использованием std ::tr1 :: unordered_map.Но тест insert_element () и find_element () пройден для всех.

1 Ответ

0 голосов
/ 30 июня 2011

Возможно, попробуйте использовать unordered_multimap. Может случиться так, что некоторые вставки завершатся неудачно из-за одинаковых ключей. Тогда количество не совпадет.

...