Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

cloge 이야기

STL 및 구현체 Operator 사용법 본문

Programming/Another

STL 및 구현체 Operator 사용법

VennTum 2016. 2. 15. 19:41


예전에 STL 및 구현체에 operator를 설정하지 못해 애먹는 적이 꽤 많았습니다...;;


예전에 모의고사에서 set에 operator 설정을 못해서 사용하지 못할 뻔 하기도 했습니다. (당시엔 수동으로 데이터를 조작해 우선순위를 바꿔서 사용하긴 했지만...구현하는데 어려우니 그러지는 않는게 좋겠습니다...)


먼저 저에게 처음 구현체와 STL에 operator를 설정할 수 있게 해준 사이트를 먼저 소개하겠습니다.


비교연산 설정을 모르던 제가 사용할 수 있도록 도움을 준 자료입니다.


STL priority queue 활용법



그럼 STL에 operator를 사용하는 방법을 설명하겠습니다.

기본적으로 구조체를 대상으로 작성하겠습니다. (일반 자료형의 경우도 구조체 자료형 선언부를 변경하는 것으로 가능합니다.)


먼저, 기본적으로 연산자를 설정하는 방법이 있습니다. 미리 선언하는 것으로 사용시 추가로 연산자를 불러올 필요가 없습니다.



구조체 정렬시 data1에 따라 오름차순으로 정렬되도록 한 코드입니다.

위 코드에서 sort 부분에 특별히 연산자를 불러오지 않아도 잘 구동합니다. (하지만, 기본적으로 설정해둔다는 점에서 별로 선호하지는 않습니다.)


본인은 구조체, 클래스 내부에 비교 연산을 구현해놓고 필요할 때마다 불러서 사용하는 방식을 선호합니다.

말 그대로 구조체 내부에 이후 사용할 비교 연산을 구현해놓는 방법입니다.



이와 같이 구조체 내부에 비교 연산을 설정하는 것으로 필요한 STL 사용시에 연산자를 불러올 수 있습니다.

위 코드는 STL sort를 이용해 구조체를 정렬할 때 기준이 되는 비교연산자를 불러와 사용했습니다.


이러한 비교 연산은 구현체( priority_queue,set,map )에도 사용할 수 있습니다.



비교연산자를 설정해놓은 구조체를 구현체에 사용하기 위해서는 <자료형, 구성하는 자료구조, 비교연산> 의 형태로 사용해야 합니다.

이때, priority queue의 경우는 비교연산에서 먼저 받는 인자의 비교데이터가 이후에 받는 인자의 비교데이터보다 클 경우 참을 반환해야 비교데이터가 가장 작은 데이터가 루트에 올라가게 됩니다. (현재 코드는 내림차순으로 정렬됩니다, 위에 sort를 사용할 때의 코드와 비교해보시면 정렬순서가 반대임을 알 수 있으실 겁니다.)

또한, STL의 경우 cmp()의 형태로 사용하지만, 구현체의 경우는 cmp와 같이 괄호를 붙이지 않고 사용합니다.



이전부터 비교 연산자, operator 설정에 꽤(...좀 많이) 애를 먹어 현재 아는 내용을 정리해보았습니다.

(앞으로는 꼭 STL을 잘 활용할 수 있기를 바라며...ㅇㅅㅇ)




Comments