lit*_*tro 4 c++ stl map sparse-matrix
我用成员写了一个小的稀疏矩阵类:
std::map<int,std::map<int,double> > sm;
Run Code Online (Sandbox Code Playgroud)
下面的方法是我用来访问矩阵元素的函数,如果通过迭代器不可能的话:
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;
}
Run Code Online (Sandbox Code Playgroud)
仍然需要经常调用此函数.有人知道如何改进这个功能吗?谢谢你.
如果您要编写自己的代码而不是使用库,那么此更改可能会显着提高性能:
std::map<std::pair<int,int>, double> sm;
Run Code Online (Sandbox Code Playgroud)
为了进一步增加,你可以去散列容器:
std::unordered_map<std::pair<int,int>, double> sm;
Run Code Online (Sandbox Code Playgroud)
(使用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))))
{ ... }
Run Code Online (Sandbox Code Playgroud)
我认为如果使用Boost.MultiIndex,可以通过使用适当的函子调用equal_range来完成上述操作.
一切都:
for(auto& cell : sm)
{ ... }
Run Code Online (Sandbox Code Playgroud)
要迭代一列,您需要分别搜索每个单元格.请注意,您的数据结构也不提供此操作.
| 归档时间: |
|
| 查看次数: |
2405 次 |
| 最近记录: |