0

我有一个map<int, string>. 键是指客户端节点。

我需要遍历映射,并将每个键与映射中保存的每个其他键与布尔函数(检查节点是否连接)进行比较。

即做类似的事情的最好方法是什么

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 */

}

我不确定如何使用节点中的其他键进行迭代部分 - 提前非常感谢。

4

2 回答 2

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();
    }
}
于 2013-06-06T02:57:24.240 回答
1

退后一步,也许这里稍微不同的数据结构会更好地为您服务?

邻接列表矩阵可能会更好,至少对于您要询问的这项任务。

要点是您将拥有以边缘为中心,而不是以节点为中心的数据结构。这将使您声明的调用fn2每对连接节点的任务变得非常容易。

让我知道根据您的要求这种方法是否有意义,我很乐意提供更多详细信息或参考资料。

于 2013-06-06T03:07:55.730 回答