我想知道是否可以通过按下值来设置边缘的属性。示例如下所示。
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之前的一个点,但它似乎非常低效。我希望有人可以给我一个建议。
答案 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);
}
};