私が提供する rect のリストの中にあるすべての要素をベクトル内に格納されたポイントのセットから削除することになっているアルゴリズムを書いています。
私は C++11 のテストの場としても使用しているので、まだ新しい機能に慣れているので、これが効率的なアプローチなのか、それとも特定の欠陥があるのか を知りたいです。取得していません。
vector<tuple<u16, u16, u16, u16>> limits;
FOR_EACH_AREA_TO_REMOVE
limits.push_back(make_tuple(
area->x - VIEWPORT_SIZE_X/2,
area->x + VIEWPORT_SIZE_X/2,
area->y - VIEWPORT_SIZE_Y/2,
area->y + VIEWPORT_SIZE_Y/2));
FOR_EACH_AREA_TO_REMOVE_END
vector<Point2D> points;
remove_copy_if(suitablePoints.begin(), suitablePoints.end(),
points.begin(), [&](const Point2D &point) {
for (auto limit : limits)
if (point->x > get<0>(limit) &&
point->x < get<1>(limit) &&
point->y > get<2>(limit) &&
point->y < get<3>(limit))
return true;
return false;
}
);
これは、問題に対するより単純な解決策のようです。ポイントセットから除外する必要がある境界のベクトルを作成し、セットポイントを反復処理します。問題へのより良いアプローチがあるかどうか疑問に思います。四角形のセットは実際には十分に制限されていますが、ポイントのセットは巨大になる可能性があることを指摘したいと思います。