我正在尝试按x和y对点矢量进行排序,这样我的结果矢量将从左到右,从上到下读取。我最初的想法是只用一个然后另一个用无序向量进行排序,所以我决定按一个排序,然后将每个具有相同x坐标的点放入向量向量内的单独向量中。分割后,我将单独对每个向量进行排序。
我的其他if语句很复杂,因为我收集点的方式,这会产生不可避免的错误。
void sortPoints(vector<Point> coor, vector< vector<Point> >& output) {
sort(coor.begin(), coor.end(), sortY);
int j = 0;
for(int i = 0; i < coor.size(); i++) {
Point co = coor[i];
if(i == 0) { output[j].push_back(co); }
else if((co.x == coor[i-1].x) || ((co.x - 1) == coor[i-1].x) ||
(co.x == (coor[i-1].x - 1)) || ((co.x - 2) == coor[i-1].x) ||
(co.x == (coor[i-1].x - 2))) {
output[j].push_back(co);
}
else j++;
}
}
我知道在输出[j] .push_back(co)期间发生了seg故障。
我已查找语法,并确保我的声明是正确的,一切似乎都很好。我想也许是因为点矢量?任何帮助是极大的赞赏。感谢。
答案 0 :(得分:1)
发生了段错误,因为你没有推进向量向量,而是在
中output[j].push_back(co);
您正试图进入vector<Point>
:output[j]
。但是(我必须猜测,因为你没有显示你如何初始化output
),看起来你没有在尝试使用它之前在j
的位置创建一个向量。
您需要以下内容:
std::vector<Point> temp;
temp.push_back(co);
output.push_back(temp);