在确定邻接矩阵不适用于80513个节点和5899882 个边之后,我决定应用adjacency list。这是我第一次实现邻接表,基本上我决定应用向量方法的向量。
因此,例如,vectorOfVectors[5]将包含邻居节点5的邻居。我正在使用的数据集可以在这里找到
目前我已经编写了这段代码,它可以正常工作,但是在我的计算机上需要 26 秒(i5 2.4,6 gb ram,运行 Win7)。我想知道是否可以改进我的代码以降低分配速度。
PS:我正在使用fstream库并从.csv文件中读取。
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
ifstream file("edges.csv");
string word="",data="";
getline(file,word);
int arrTemp[3];
int numberOfNodes=atoi(word.c_str());
vector<int>temp;
vector< vector<int> >adjacencyList;
for(int i=0;i<numberOfNodes;i++)
{
adjacencyList.push_back(temp);
}
while(file.good() && getline(file,word))
{
//cout<<word<<endl;
if(word.size()>0)
{
for(int i=0;i<3;i++)
{
int cutFrom=word.find_first_of(',');
arrTemp[i]=atoi(word.substr(0,cutFrom).c_str());
word=word.substr(cutFrom+1,word.length());
}
//cout<<arrTemp[0]<<" "<<arrTemp[1]<<endl;
adjacencyList[arrTemp[0]-1].push_back(arrTemp[1]-1);
}
else
break;
}
cout<<"Vector size:"<<adjacencyList[1].size()<<endl;
return 0;
}