2017-04-14 80 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';看到更正的答案。 –