我想知道是否可以通过推入值来设置边缘的属性。下面显示了一个示例。
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
。