knight7024   6년 전

벡터 페어를 문자열로 정렬해서 이진 검색하는 소스입니다.

cin과 cout이 시간 초과 난대서 scanf, printf로 바꾸었습니다.

16%에서 시간 초과가 나는데 다른 분들은 map 쓰셨더라구요.

벡터 std::sort 로는 못 푸나요?

chogahui05   6년 전

이렇게 고쳐보세유

knight7024   6년 전

앗 맞았어요

혹시 이유가 뭔지 알려주실 수 있나요??

chogahui05   6년 전

벡터를 고대로 넘기는 것 = 크기가 어마어마한 것을 통째로 넘기는 것 이라고 생각하심 편할 거 같아요.

일단 여기까지만 답변드리고 나머지는 더 찾아볼게요.

아래 프로그램을 실행하면 결과는 1이 나옵니다.

아. 수족관 어렵네요.

chogahui05   6년 전

제가 봤을 때는 이런 거 같습니다. 정확하진 않겠지만..

일단 위 예제에서는 vector <int> v를 넘겨버렸습니다.

그리고 foo에서 받죠. callee의 인자가 v니까유.


foo함수의 v = main 함수의 v가 됩니다. 벡터의 대입 연산이죠. 

이건 연산자 override 되어있습니다.


이 사이트를 보세요.

http://www.cplusplus.com/refer...

분명한 건 복잡도가 size에 비례한다고 되어 있습니다. 즉 할당한다는 소리겠지요.

chogahui05   6년 전

그런데 &로 줘버리면. &는 별명입니다. 

int chogahui=9;

int &chokw = chogahui; 라고 한다면 chokw의 별명은 chogahui가 되는 거죠. 


그러니까

저를 chokw로 부르던.. chogahui로 부르던. 저를 부르는 건 똑같잖아요. 그런 것이랑 마찬가지라 생각하심 됩니다. 


어찌 되었던, callee의 v는 main에 있는 벡터 v의 별명이므로, 사실상 같은 공간을 가리키고 있게 됩니다.

따라서, 추가적인 할당이 안 일어나겠지요.

knight7024   6년 전

아 오버라이드 연산자 들어본 거 같습니다.

상세한 설명 감사합니다!!! 이렇게 또 하나 배워갑니다 ㅎㅎㅎ

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