将map中的键与函数进行比较

compare keys in map against a function

本文关键字:函数 比较 map      更新时间:2023-10-16

我有一个map<int, string>。键引用客户端节点。

我需要遍历map,并根据布尔函数(检查节点是否连接)将每个键与map中持有的其他键进行比较。

。做像

这样的事情的最好方法是什么?
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 */
}

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

最简单的解决方案是:

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();
    }
}

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

邻接表或矩阵可能会更好,至少对于你正在询问的这个任务。

要点是你将拥有一个以边为中心,而不是以节点为中心的数据结构。这将使您在每一对连接节点上调用fn2的既定任务非常容易。

请告诉我这种方法是否符合您的要求,我很乐意提供更多细节或参考资料。