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

发布于 2024-10-17 07:55:15 字数 782 浏览 4 评论 0原文

我正在使用 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() 测试全部通过。

I'm using the boost library(1.44) and VC++ 2010.

I found some problem with below code,

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)

This test failed for only StorageUnorderedMap using std::tr1::unordered_map.
But insert_element() and find_element() test passed for all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烙印 2024-10-24 07:55:15

也许尝试使用 unordered_multimap。某些插入可能会因为相同的键而失败。那么计数将不匹配。

Perhaps try to use unordered_multimap. It could be that some insertions fail because of equal keys. Then the counts will not match up.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文