【问题标题】:Is there a way to get a node via a Map value in LEMON Graph library?有没有办法通过 LEMON Graph 库中的 Map 值获取节点?
【发布时间】:2018-02-12 16:35:55
【问题描述】:

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

我在想这样的事情:

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

【问题讨论】:

    标签: c++ lemon-graph-library


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      据我所知,开箱即用的 Lemon 不可能做到这一点。特别是,因为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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 2021-06-17
        • 1970-01-01
        • 2021-08-30
        相关资源
        最近更新 更多