C++ 存储文件c+中的集合+;

C++ 存储文件c+中的集合+;,c++,matrix,C++,Matrix,假设我有一个包含内容的.txt文件 5 0 1 1 2 2 4 3 2 4 0 1 3 第一个数字是文件中的集合数(NxN矩阵)。其余的是一个简单图的集合 我想知道从文件中存储数据集(表示简单图形的点)的最佳方法是什么。正在使用此数据创建和显示邻接矩阵 例如: 我想从文件中提取它们,以某种方式存储它们,这样我就能够比较它们之间的邻接关系 我希望能够分别读取这两个数字,因此如果我看到集合40,我知道4与0相邻,反之亦然。我还希望能够在每个矩阵行中查看图形中的每个集合一次(4和0相邻,还有什

假设我有一个包含内容的
.txt
文件

5
0 1 
1 2 
2 4 
3 2
4 0
1 3
第一个数字是文件中的集合数(NxN矩阵)。其余的是一个简单图的集合

我想知道从文件中存储数据集(表示简单图形的点)的最佳方法是什么。正在使用此数据创建和显示邻接矩阵

例如:

我想从文件中提取它们,以某种方式存储它们,这样我就能够比较它们之间的邻接关系

我希望能够分别读取这两个数字,因此如果我看到集合
40
,我知道4与0相邻,反之亦然。我还希望能够在每个矩阵行中查看图形中的每个集合一次(4和0相邻,还有什么与4相邻)

您将如何存储这些数据以最适合我的需要?堆栈大堆向量


干杯

要存储这对顶点,可以使用:

啊,见鬼。与

std::map<unsigned, std::vector<unsigned>> sparse;
a
b
是相邻的,因此它们被添加到彼此的行中
sparse[nodeNum]
返回对
nodeNum
向量的引用,因此这是相邻节点的列表。例如:

std::cout << "4 is adjacent to ";
for(unsigned val: sparse[4])
{
    std::cout << val << " ";
}

std::cout很有趣。选择的答案与我阅读这个问题的方式几乎没有任何共同之处。请随意添加您的答案@user4581301@Jarvis不确定是否值得花时间。可能是我看错了问题,或者问题的措辞很奇怪。我认为类似于
std::map
的方法更符合“我还希望每个矩阵行能够查看图形中的每个集合一次”的要求。战术说明:由于阵列的空间位置较低,阵列阵列方法在现代处理器上的速度可能会非常慢。而且清理起来有点困难。如果你需要这个矩阵快速,
int **adjacency = new int *[n];
for(int i = 0;i < n;i++)
    adjacency = new int[n];
memset(adjacency, 0, sizeof(adjacency));
vector<pair<int, int> >::iterator it = vertices.begin();
while(it != vertices.end()){
    adjacency[it -> first][it -> second] = 1;
    adjacency[it -> second][it -> first] = 1;
}
std::map<unsigned, std::vector<unsigned>> sparse;
unsigned a,b;
while(in >> a >> b)
{
    sparse[a].push_back(b);
    sparse[b].push_back(a);
}
std::cout << "4 is adjacent to ";
for(unsigned val: sparse[4])
{
    std::cout << val << " ";
}