sjnov11   5년 전

안녕하세요,

Associatvie container 에서 comparator 를 템플릿의 argument로 넘겨줄 수 있는데

  1. 왜 아래 처럼 항상 operator() 로 정의해주어 하는지 
  2. operator() 와 operator < () 와의 차이점은 무엇 인지
  3. operator < () 로는 compartor로 사용할 수 없는 이유가 무엇인지
  4. 마지막으로 reference 를 인자로 사용해야 하는 이유가 무엇인지

궁금합니다.

답변주시면 대단히 감사하겠습니다.

jung2381187   5년 전

기본적으로 C++은 원소의 대소 비교에 < 연산자를 사용합니다. 사용자 클래스에 연산자 오버로딩으로 <를 정의했으면 이때는 비교 함수를 정의하지 않아도 됩니다. 만약 <를 정의하지 않았거나 이미 정의되었지만 그 정의를 쓰고 싶지 않은 경우 새로 비교 함수를 정의해서 템플릿에 넘겨줄 수 있습니다. 중요한 건 이게 비교 "함수"이기 때문에 () 연산자로 호출할 수 있는 형태가 와야 합니다. 그래서 클래스에 원소 두 개를 받아 비교 결과를 내놓는 () 연산자를 정의해야 합니다.

댓글을 작성하려면 로그인해야 합니다.