지정된 공간에 블럭을 설치하지 못하게 막는 마인크래프트 플러그인을 만들고 있는데(c++ 20)


보호하고 싶은 공간을 담아두는 Area 클래스가 있음.

class Area { public: Vector3 first; Vector3 second; bool inArea(Vector3 &vec) { auto minX = std::min(first.x, second.x); auto maxX = std::max(first.x, second.x); auto minY = std::min(first.y, second.y); auto maxY = std::max(first.y, second.y); auto minZ = std::min(first.z, second.z); auto maxZ = std::max(first.z, second.z); auto &x = vec.x; auto &y = vec.y; auto &z = vec.z; return x >= minX && x <= maxX && y >= minY && y <= maxY && z >= minZ && z <= maxZ; } };


그리고 Area클래스들을 저장하는 myMap과 플레이어가 블럭을 설치할 때 마다 호출되는 canPlaceBlock함수가 있음

std::map<int, Area> myMap; // 블럭 설치시 호출되는 함수 bool canPlaceBlock(Vector3 &blockLocation) { for (auto &it : std::views::values(myMap)) { if (it.inArea(blockLocation)) // 만일 myMap에 추가된 Area의 위치에 블럭을 놓으려 했다면 return false; // 블럭 설치 불가능 } return true; // myMap에 등록된 area들과 겹치지 않음, 블럭 설치 가능! }

myMap에 담긴 데이터가 몇십개라면 괜찮겠지만 저게 수백 수천개가 들어가게 되고, 그걸 for loop으로 하나하나 검사하면 블럭을 놓을때 마다 처리속도가 너무 느려지지 않을까 싶은데..


이것보다 효율적인 방법이 있을까?