2012-10-09 5 views
1

안녕하세요 저는 C++을 사용하여 좌표계를 만들고 싶습니다. 몇 가지 (x, y) 좌표를 사용자로부터 얻고 좌표계 (지도의 더 많은) 스타일을 만들어야합니다. 이것을 어떻게 할 수 있습니까? 아래 다이어그램과 같아야합니다. 2D 배열이나 벡터를 사용해야하고 루프가 마킹을 어떻게 다르게해야합니까?C++의 좌표계

**1************ 
*************** 
*************** 
*************** 
***1*********** 
*************** 
*************** 
********1****** 

이 같이 할 필요가

(2,0) (4,3) (7,8) 내가 지금까지 가지고 코드이지만, 문제는 표시 할 수 없습니다 더 그 중 하나의 좌표보다. 방금 루프를 2 개 사용하여

for(int i = -6; i < 7; i++) 
    if (i < 0) 
     cout<<" "<<i; 
    else 
     cout<<" "<<i; 
cout<<endl; 

for(int i = 0; i < 15; i++) 
    { 
     cout<<(char)(i + 49); 
     for(int j = -6; j < 7; j++) 
     if(i == y - 1 && j == x) 
      cout<<" x "; 
     else 
      cout<<" . "; 

     cout<<(char)(i + 49)<<endl; 
    } 

을 알려주십시오. 감사 !!

답변

5

셀에 저장하려는 내용에 따라 vector<string> 또는 vector<vector<char> > 또는 vector<vector<string> > 중 하나를 사용하는 것이 좋습니다. 셀이 단일 문자이면 첫 번째 옵션이 가장 좋습니다. 그리고지도를 만드는 그 이후 정말 쉬운 :

int n,m; 
cin >> n >> m; 
vector<string> a(n, string(m, '*'); 

나는 무엇인지 잘 모르겠습니다 '.' 및 위의 코드에서 'x'하지만 당신을 위해 남겨진 모든 이미징은 여러 쌍의 좌표를 입력하고 vector<string>의 각 요소를 '1'로 바꿉니다.

희망이 도움이됩니다.

+1

벡터 >. 요소를 직관적으로 표시합니다. +1, btw. 하지만 당신의 권리는 콘솔에 덤핑해서 문자열의 큰 스택을 이기기 어렵습니다. P – WhozCraig

+1

Accelerated C++ (Koenig & Moo)는 여기에서도 vector-of-string 방식을 사용합니다. 'a [y] [x]'구문을 허용합니다. 반 직관적 일 수 있습니다. – MSalters

+0

+1, 이것은 아마도 작전에 대한 최소한의 저항 경로 일 것입니다. 그러나 '관심 지점'이지도 크기와 얼마나 관련이 있는지에 따라지도를 동적으로 성장시켜야할지 여부를 결정할 수 있으며, CoordType을 std :: pair 및 적절한 비교 연산자로 정의하는 것이 중요합니다. 그것을지도/세트 (Pawel의 대답과 유사)의 키로 사용하는 것이 더 자연스러운 구현 일 수 있습니다. IMO는 그리드 맵의 크기가 평생 동안 일정한 지 여부에 관계없이 어떤 접근 방식이 더 잘 작동 하는지를 결정하는 핵심 요소입니다. – WeirdlyCheezy

0

다른 문제를 풀려면 루프를 사용하여 변경하고 다른 하나는 결과를 표시 할 수 있습니다.

vector<string> matrix ; 
list<pair> PairList ; 

for (list<pair>::const_iterator it = PairList.beguin(); i < PairList.end(); it++) { 
    matrix[ (*it).second ][ (*it).first ] = "." ; 
} 

그리고 결과를 보여 :

for (int i = 0; i < matrix.size; i++) { 
    cout << matrix[i] << endl ; 
} 
1

내가 std::pairstd::set를 사용하여 조언을 대신 할 당신이 좌표 쌍을 저장하는 목록을 사용하는 경우 izomorphius의 제안을 사용하여, 그것과 같을 것이다 std::vector - 전체 그리드를 메모리에 둘 필요가 없습니다. 단지 포인트가 필요합니다. FTW

http://liveworkspace.org/code/f434521b804485f16786556762780448

+0

뭐야? 오, 당신은 전체 그리드를 잡는 것보다 마술 포인트를 가진 컨테이너를 의미합니다. 나는 그것을 얻는다 –

+0

'map'의'map'은 끔찍한 생각입니다. 왜냐하면 그것은 단지 벡터보다 훨씬 크고 느릴 것이기 때문입니다. 결코 더 좋지 않습니다. 특별한 포인트의'set'은 좋은 아이디어입니다. –

+0

느리게 - 예, 더 크게 - 어쩌면 의심 스럽습니다. 매직 포인트의 수가 중요 할 때만 가능합니다 (그리드의 전체 포인트의 10 % -20 %와 같은).전체 그리드를 잡기 위해'vector'를 사용하는 것은 아마 225B를 조금 넘는 것입니다 - 나는 15 포인트를 가진'map'이 여전히 그것보다 작을 것이라고 생각합니다. –