我想知道是否可以通过推入值来设置边缘的属性。下面显示了一个示例。

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

我可以来获取的 vector 属性,推入一点,然后再放回Edge中,但这似乎效率很低。我希望有人能给我一个建议。

最佳答案

更简单:

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

问题的关键是引用 vector 而不是复制它。

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

10-08 06:54