Boost Graph Library - 将矢量推入edge属性

时间:2017-03-23 08:31:32

标签: c++ boost

我想知道是否可以通过按下值来设置边缘的属性。示例如下所示。

struct Edge {

    //boundary length
    int length = 0;

    //boundary coordinates
    vector<cv::Point> boundary;

    //pointer to heap
    boost::heap::fibonacci_heap<rnn, boost::heap::compare<compare_nn>>::handle_type heap_pointer;

    Edge(float length = 0) : length (length ) {}
};

//i'd like to push in point into vector<cv::Point> boundary
boost::put(&Edge::boundary, g, boost::edge(0, 1, g), cv::Point(2,2)); 

我可以获取向量属性,推送在我重新加入Edge之前的一个点,但它似乎非常低效。我希望有人可以给我一个建议。

2 个答案:

答案 0 :(得分:1)

更简单:

auto& boundary = boost::get(&Edge::boundary, g, boost::edge(0, 1, g));
boundary.emplace_back(2,2);

关键是将引用带到向量而不是复制它。

当然,如果您的标准库尚不支持push_back(cv::Point(2,2)),您可以将其拼写为emplace_back

答案 1 :(得分:0)

我不知道我是否理解你的问题,但似乎这可能是简单的结构方法:

struct Edge {
  // your stuff here
  void push(cv::Point& point) {
    boundary.push_back(point);
  }
};