STL map 관련 질문입니다.

yans의 이미지

STL에서 map을 사용할 때 제가 원하는 타입의 key와 value를 사용하고 싶은데 방법을 잘 모르겠습니다.

예를 들어 자료형이 다음과 같을때
class Position {
public:
int x,y,z;
}

class MapData {
public:
Position xyz; // key

PositionData p1,p2,p3; // value
double value
}

position xyz를 키값으로 사용해서 map을 사용하려고 하는데 방법을 모르겠어서 질문을 드립니다.
레퍼런스와 기타 등등의 문서를 찾아보았는데 char, int, double 들의 방법만 찾을수 있어서요.

답변 부탁드리겠습니다.

kewlbear의 이미지

Map은 associative container이고, STL의 associative container는 ordered container입니다. Ordered라는 말은 순서가 정해져 있어야 한다는 것입니다. 순서를 정해주는 방법은 여러가지가 있는데 기본적으로는 operator< 을 사용하게 됩니다.

class Position {
public:
  bool operator<(const Position& rhs) const
  {
    if (x != rhs.x) {
      return x < rhs.x;
    } else if (y != rhs.y) {
      return y < rhs.y;
    } else {
      return z < rhs.z;
    }
  }
// 이하 생략

자세한 내용은 strict weak ordering을 찾아보시면 됩니다. 참고로 TR1에는 unordered container가 추가되었습니다.