有没有办法通过 LEMON 图形库中的 Map 值获取节点?

Is there a way to get a node via a Map value in LEMON Graph library?

本文关键字:Map 获取 节点 图形库 LEMON 有没有      更新时间:2023-10-16

>我是使用LEMON 图形库的人,想知道是否有一种有效的方法可以通过其相应ListDigraph::NodeMap的值接收ListDigraph::Nodex

我在想这样的事情:

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 的NodeMap中获取密钥集(或相应的节点),请参阅 NodeMap 参考。

也无法遍历地图。克服此问题的最佳方法是编写自己的映射,就像编写自己一样,或使用其他帮助程序映射(或类似的容器)。

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

您也不能直接循环访问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");