STL 의 템플릿은 매우 강력하지만, struct 의 경우 map 의 멤버 타입으로 사용할 때 주의를 요한다. 일반적으로 그냥 struct 만 선언해서는 map 에 넣을 수 없다.
struct Node { int a; int b; }; Node node; node.a = 2; node.b = 3; map<int, int> aa; aa[1]=1; //O.K. map<Node, int> bb; bb[node]=1; //Compile Error
정상적으로 사용하기 위해서는 아래와 같이 < 연산자에 대해 오버라이딩 해 주어야 한다. 주의할 것은 아래는 < 연산자 오버라이딩의 한 예일 뿐이며, 본인의 코드 로직에 맞는 오버라이딩을 해 주어야 한다.
bool operator<(Node const& n1, Node const& n2) { return n1.a<n2.a || (n1.a==n2.a && n1.b<n2.b); }