2012-10-04 3 views
2

C++에서 두 개의 다른 데이터 형식을 저장할 배열을 만들려고합니다. 기본적으로 ID와 실제 데이터 유형이 필요합니다.두 개의 다른 데이터 유형을 가진 2 차원 배열?

psuedocode :

array[int][myObj] 

0, myObj1 
1, myObj2 
2, myObj3 

난이 배열을 선언하는 방법을하지 않습니다 이해합니다. 이 기능이 가능합니까? 구조체로 사용자 정의 클래스를 만들어야합니까?

+0

직접 답변을하려면 구조체 필요로 사용할 수 있습니다 (아마도'표준 : pair'을?). 그러나, 당신이 원하는 것은'std :: map '입니다. –

+1

'std :: vector >'어쩌면. – slaphappy

+1

간단한 유형의 배열 인 myObj는 충분하지 않습니까? 귀하의 예제에서 ID는 배열에 대한 색인 일뿐입니다. –

답변

5

사용 방법에 따라 다릅니다.

  1. myObj로의 간단한 배열 : 모든 유효한 사용 사례가 여러 옵션이있다 myObj array[]은. 이것은 객체의 관련 ID가 단순히 배열에있는 객체의 색인이기 때문에 여러분이 제시 한 예제와 일치합니다. 첫 번째 요소는 ID 0, 두 번째 요소는 ID 1 등입니다. 그러나 유연성과 좋은 C++ 스타일을 위해서 실제로는 std::vector 또는 std::array을 사용해야합니다.

  2. 어레이의 위치에 관계없이 각 개체를 고정 ID와 연결하려는 경우 (경우에 따라 다른 위치에서도 가능). std::pair<int, myObj>을 사용하여 개체의 인스턴스에 정수를 페어링 할 수 있습니다. 다음과 같이 사용하십시오.

    std::vector<std::pair<int, myObj>> v; 
    v.push_back(std::make_pair(0, myObj1)); 
    

    이와 비슷한 방법은 myObj 클래스에 ID를 캡슐화하는 것입니다. 그러나 이는 특정 경우에 적절하지 않을 수 있습니다 (ID는 실제로 myObj의 일부가 아니며 언제든지 동일한 객체에 별도의 ID가 사용될 수 있습니다).

  3. ID로 배열의 요소에 액세스 할 수 있어야하는 경우 std::map<int, myObj>이 필요합니다. 그러면 정수 ID가 myObj의 인스턴스에 매핑됩니다. 그래서처럼 사용

    std::map<int, myObj> m; 
    m.insert(std::make_pair(0, myObj1)); 
    

    이제, 예를 들어, 함께 m[0]를 요소에 액세스 할 수 있습니다. 주문한되고 액세스 시간을 단축하고 싶은 요소에 대해 상관하지 않는 경우, 당신은 std::unordered_map 대신

0

C++에서 배열의 모든 멤버는 같은 형식이며 다차원 배열은 실제로 1 차원 배열로 구현됩니다.

std::vector<std::pair<int, MyObj> > vec; 

또는 : 당신은 단지 그들의 서로 다른 두 가지 유형의 행을 포함하는 배열을 원하는 경우에

, 나는 제안

std::pair<int, MyObj> arr[200]; // generally always prefer std::vector over array, but this is possible 

당신하여 MyObj 개체의 조회를 기반으로 확인하려면 int는 std :: map 또는 std :: multimap입니다.