이 질문은 실제 코드보다는 알고리즘 및 함수의 올바른 사용에 관한 것입니다.거리를 결정하는 효율적인 방법이 있습니까?
내 코드에서 맵을 사용하여 상자를 시뮬레이션합니다. maps 요소는 vector<int>
을 키로 사용하고 set<shared_ptr<foo> >
을 값으로 사용합니다.
나는 모든 상자를 통해 이동하는 중첩 루프를하고 있어요 :
mit1 = boxes.begin(); //mit1 is an appropriate iterator
int edge = 10;//represnd periodic boundary conditions
while (mit1 != boxes.end()){
vector<t> = mit1->first;
mit2 = mit1++;
while (mit2 != boxes.end()){
vector<int> u = (mit2++)->first;
bool good = true;
for (int i = 0; i < 3 && good; i++){
u[i] = (int)fabs(u[i] - t[i]);
good = u[i] == 0 || u[i] == 1 || u[i] == edge;
}
if (!good) continue;
}
}
내 관심사는 전체 중첩 루프뿐만 아니라 for
루프입니다. 인접한 모든 상자를 계산하는 기능이 더 효율적이라고 생각하십니까? for 루프 테스트를 수행하는 더 좋은 방법을 알고 있습니까?
확실히 더 좋은 방법이 있습니다! – Arunmu
무엇을 계산하려고합니까? 그리고 당신은 mit2와 u를 혼동하지 않았습니까? (다른 말로하면 두 번째 동안 무한 루프가 없음)? – Ofir
고마워, 나는 루프를 바꿨으므로 지금은 괜찮을 것이다. 두 상자가 하나의 엔진에서 나오는 모든 경우를 제거하여 상자 내의 입자가 상호 작용할 가능성이 없다. 상자 크기는이 거리에 고정되어 있지만 상자 거리 계산이 남아 있습니다. – Yotam