1

我正在使用LEMON Graph 库,想知道是否有一种有效的方法可以通过其对应的值接收ListDigraph::Node xListDigraph::NodeMap

我在想类似的事情:

lemon::ListDigraph lg;
lemon::ListDigraph::NodeMap<std::string> nodeColor(lg);

lemon::ListDigraph::Node n = lg.addNode();
nodeColor[n] = "red";

lemon::ListDigraph::Node m = lg.addNode();
nodeColor[m] = "green";

# now I'd like to have something like:
lemon::ListDigraph::Node x = nodeColor.getNodeFromColor("red");

LEMON中是否已经存在类似的东西?如果除了写自己的地图别无他法,我如何返回键(节点)?我可以迭代地图的基础值吗?

4

2 回答 2

0

据我所知,开箱即用的柠檬是不可能的。特别是,因为NodeMap不一定是一对一的。没有什么可以阻止您为所有节点赋予值“red”,因此向后查询不会有唯一的正确结果。

您也不能直接迭代 a 的内容NodeMap。但是,您可以遍历图中的所有节点,并要求相应的值:

for (lemon::ListDigraph::NodeIt n(lg); n != lemon::INVALID; ++n) {
    if (nodeColor[n] == "red) {
        // do something
    }
}

或者,正如您所提到的,您可以定义自己的地图:

#include <unordered_map>

lemon::ListDigraph lg;
lemon::ListDigraph::NodeMap<std::string> nodeColor(lg);
std::unordered_map<std::string, lemon::ListDigraph::Node> color2node;

lemon::ListDigraph::Node n = lg.addNode();
nodeColor[n] = "red";
color2node.emplace("red", n);

lemon::ListDigraph::Node m = lg.addNode();
nodeColor[m] = "green";
color2node.emplace("green", m);

lemon::ListDigraph::Node x = node2color.at("red");
于 2018-04-13T15:36:23.560 回答
0

不幸的是,无法从 Lemon's 获取密钥集(或相应的节点)NodeMap,请参阅NodeMap 参考

也没有办法遍历地图。克服这个问题的最好方法是编写自己的地图,就像你自己编写的那样,或者使用额外的辅助地图(或类似的容器)。

于 2018-03-13T11:09:31.573 回答