2013-03-05 55 views
-4

下面的代碼
怪異的行爲映射

next = friendchain.begin()->first; 
while(true) { 
    start = next; 
    next = friendchain[next]; 

    if(next!=0) { 
     friendchain.erase(start); 
     groupcount++; 
     size = friendchain.size(); 
     printf("size=%i\n", size); 
     //size = 0 
    } 

    if (next==0) { 
     size = friendchain.size(); 
     printf("size=%i\n", size); 
     //size = 1!!! 

     if (friendchain.empty()) 
     { 
      break; 
      //should go out of the loop here 
     } else { 
      next = friendchain.begin()->first; 
      // next has value of 3 
     } 
    } 
} 

我friendchain地圖的內容是:
1 - > 2和
2 - > 3
我不明白爲什麼其他部分正在執行。
讓我知道你是否需要更多的代碼。
關於

+3

你的問題是可怕的。我沒有downvote,你的代碼也不好,使用迭代器來遍歷你的地圖,那麼你不需要檢查它是否是模擬 – 2013-03-05 17:17:49

+0

請至少顯示下一個好友鏈的類型並開始 – odinthenerd 2013-03-05 17:19:34

+0

我正在使用地圖第一次,我仍然學習朗指C++文檔,並沒有得到任何解決方案。 @PorkyBrain開始和下一個很長。 – 2013-03-05 17:24:46

回答

1

我刪除了一些不需要的if語句,而且您沒有正確處理擦除操作。

auto itr = friendchain.begin(); 
while (itr != friendchain.end()) { 
    if (itr->first != 0) { 
     friendchain.erase(itr++); 
     groupcount++; 
    } else { 
     ++itr; 
    } 

    std::size_t size = friendchain.size(); 
    printf("size=%i\n", size); 
}