Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在元素填充过程中经济地存储稀疏矩阵?_C++_Memory Management_Sparse Matrix - Fatal编程技术网

C++ 如何在元素填充过程中经济地存储稀疏矩阵?

C++ 如何在元素填充过程中经济地存储稀疏矩阵?,c++,memory-management,sparse-matrix,C++,Memory Management,Sparse Matrix,我知道有很多好方法可以存储稀疏矩阵而不占用太多内存。 但我想知道,在构建稀疏矩阵的过程中,是否有一种很好的方法来存储稀疏矩阵?下面是更详细的场景:程序通过计算在每次迭代中放置非零值的位置来构造稀疏矩阵;由于非零值的坐标在运行时之前是未知的,所以它们是完全随机和不可预测的 我正在用C++编程。那么C++有没有实现的方法呢?其他语言的解决方案也很受欢迎。std::map可能是您所寻找的,它是一种键->值映射类型。将其与std::set结合使用,后者是一个独特的元素集合。因此,您可以使用std::se

我知道有很多好方法可以存储稀疏矩阵而不占用太多内存。 但我想知道,在构建稀疏矩阵的过程中,是否有一种很好的方法来存储稀疏矩阵?下面是更详细的场景:程序通过计算在每次迭代中放置非零值的位置来构造稀疏矩阵;由于非零值的坐标在运行时之前是未知的,所以它们是完全随机和不可预测的


我正在用C++编程。那么C++有没有实现的方法呢?其他语言的解决方案也很受欢迎。

std::map可能是您所寻找的,它是一种键->值映射类型。将其与std::set结合使用,后者是一个独特的元素集合。因此,您可以使用std::set的映射,如下所示:

std::map<int, std::set<int> > sparseMatrix;

// Add some edges.
sparseMatrix[0].insert(1); // Add an edge from vertex 0 to 1.
sparseMatrix[4].insert(2); // Add an edge from vertex 4 to 2.
sparseMatrix[0].insert(1); // Edge already exists, no data added to the set.
std::map sparseMatrix;
//添加一些边。
sparseMatrix[0]。插入(1);//将边从顶点0添加到1。
sparseMatrix[4]。插入(2);//将边从顶点4添加到顶点2。
sparseMatrix[0]。插入(1);//边缘已存在,未向集合中添加任何数据。
这种表示法可以表示有向图,类似于边列表。集合的行为还可以防止两条边“相同”(a->b和c->d,其中a=b和c=d),这很好,如果使用邻接矩阵,就会得到这种行为。可以像这样迭代所有边:

for(std::map<int, std::set<int> >::const_iterator i = sparseMatrix.begin();
    i != sparseMatrix.end();
    ++i)
{
    for(std::set<int>::const_iterator j = i->second.begin();
        j != i->second.end();
        ++j)
    {
        std::cout << "An edge exists from " << i->first << " to " << *j << ".";
    }
}
for(std::map::const_迭代器i=sparseMatrix.begin();
i!=sparseMatrix.end();
++(一)
{
对于(std::set::const_迭代器j=i->second.begin();
j!=i->second.end();
++(j)
{

std::cout您可以有3个并行列表,其中一个存储行id,另一个存储列id,第三个存储值。处理完所有条目后,您可以根据需要重新组织,例如按行和列排序

您的问题中没有描述的是,您最终需要/想要如何表示稀疏矩阵?您需要用它做什么?这会影响表示