2017-04-14 79 views
1

我想从包含36692个节点的文本文件制作图形,文本的每一行都包含图形边缘的源节点和目标节点。我用igraph库创建图形。我写了下面的代码,但它太慢了。我该如何改进它?从C++中的文本文件快速创建图形

igraph_empty(&graph, 36692, 0); 
    ifstream inputFile("Email-Enron.txt"); 
    string line; 

    while (getline(inputFile, line)) 
    { 
     istringstream ss(line);  
     int v1, v2; 
     ss >> v1 >> v2 ; 
     igraph_add_edge(&graph, v1, v2); 
    } 

回答

3

如果读取的文件是瓶颈(你实际上就应该剖析),我建议你摆脱多余stringstream变量。

如果每一行只包含两个数字而没有其他内容,则直接从流中直接读取数字也会起作用,因为操作符>>将新行视为空白并忽略它,方式与忽略空白相同:

igraph_empty(&graph, 36692, 0); 
    ifstream inputFile("Email-Enron.txt"); 

    int v1, v2; 
    while ((inputFile >> v1 >> v2)) { 
     igraph_add_edge(&graph, v1, v2); 
    } 
+1

如果文件只包含(2 * 36692)数字,那么最好是将整个文件读入内存缓冲区并进行1次读取操作。 – KonstantinL

+0

谢谢。但是,为什么它会给出错误:“预计a”)'“? – mary

+0

使用'ifstream'而不是'inputFile';看到更正的答案。 –