2013-06-06 69 views
0

我有一個map<int, string>。密鑰是指客戶端節點。比較地圖上的按鍵功能

我需要遍歷該映射,並將每個鍵映射到布爾函數(檢查節點是否已連接)上。

I.e.什麼是做這樣的事情

map<int, string> test_map; 
map<int, string>::iterator iter; 

for (iter = test_map.begin(); iter!=test_map.end(); iter++) 
{ 
    int curr_node = iter->first; 

    /* psuedo-code: 
    1. iterate through other keys 
    2. check against boolean e.g. bool fn1(curr_node, test_node) returns true if nodes are connected 
    3. perform fn2 if true */ 

} 

我不知道如何在各節點的其他鍵做迭代部分的最好辦法 - 提前很多感謝。

+1

只需製作當前iter的一個副本並迭代它直到它到達地圖的結尾。 – Patashu

+0

連接是否定向或不定向? – Cameron

+0

執行檢查的布爾函數是如何工作的?如果在某種類型的邊緣列表中進行查找,難道你不能簡單地遍歷該列表,而不是地圖? – jogojapan

回答

1

的完全天真的結局是這樣的:

map<int, string>::iterator iter, iter2; 

for (iter = test_map.begin(); iter != test_map.end(); iter++) 
{ 
    int curr_node = iter->first; 
    for (iter2 = test_map.begin(); iter2 != test_map.end(); iter2++) 
    { 
     if(iter == iter2) continue; 
     int test_node = iter2->first; 
     if(fn1(curr_node, test_node)) fn2(); 
    } 
} 
1

退一步說,也許你會在這裏通過一個稍微不同的數據結構得到更好的服務?

一個adjacency listmatrix可能會工作得更好,至少對於這個任務你問。

的要點是你有一個以邊爲中心而不是以節點爲中心的數據結構。這將使你明確的任務在每一對連接的節點上調用fn2非常容易。

讓我知道如果這種方法根據您的要求是有意義的,我會很樂意包含更多的細節或參考。