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 << " ";
}