gpt4 book ai didi

c++ - 更高效的稀疏矩阵元素访问器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:27 34 4
gpt4 key购买 nike

我和成员写了一个小的稀疏矩阵类:

std::map<int,std::map<int,double> > sm;

下面的方法是我用来访问矩阵元素的函数,如果不能通过迭代器访问的话:

double matrix::operator()(int r,int c) const
{
std::map<int,std::map<int,double> >::const_iterator i = sm.find(r);
if(i==sm.end()) { return 0.0; }
std::map<int,double>::const_iterator j = i->second.find(c);
if(j==i->second.end()) { return 0.0; }
return j->second;
}

这个函数仍然需要经常调用。有人知道如何改进此功能吗?先谢谢了。

最佳答案

如果您要编写自己的代码而不是使用库,那么此更改可能会显着提高性能:

std::map<std::pair<int,int>, double> sm;

要进一步增加,您可以转到散列容器:

std::unordered_map<std::pair<int,int>, double> sm;

(使用 tr1、boost 或 C++0x)

编辑:在第一种情况下,您可以像这样遍历 row:

for(auto& cell : make_pair(
sm.lower_bound(make_pair(row, 0)), sm.lower_bound(make_pair(row+1, 0))))
{ ... }

如果您使用 Boost.MultiIndex,我认为您可以通过使用适当的仿函数调用一次 equal_range 来完成上述操作。

超越一切:

for(auto& cell : sm)
{ ... }

要遍历列,您需要分别搜索每个单元格。请注意,您的数据结构也不提供此操作。

关于c++ - 更高效的稀疏矩阵元素访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842353/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com