2014-01-21 3 views
0

숙제 지정의 일환으로 std :: Map과 비슷한 컨테이너를 구현해야했습니다.맞춤 컨테이너 정렬

지도를 구현 한 후 std : sort 키를 사용하여 정렬하려고했습니다.

std::sort(connectedFans.begin(), connectedFans.end()); 

는 어디 connectedFans이다 : 나는 다음과 같은 오류가 받고 있어요 그러나

Map<int, shared_ptr<Fan> >. 

:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/algorithm:3752:90: error: no type named 
     'value_type' in 'std::__1::iterator_traits<mtm::Map<int, std::__1::shared_ptr<mtm::Fan> >::iterator>' 
    _VSTD::sort(__first, __last, __less<typename iterator_traits<_RandomAccessIterator>::value_type>()); 
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ 
FanBookServer.cpp:50:2: note: in instantiation of function template specialization 'std::__1::sort<mtm::Map<int, 
     std::__1::shared_ptr<mtm::Fan> >::iterator>' requested here 
     std::sort(connectedFans.begin(), connectedFans.end()); 
     ^
1 error generated. 

그러나 나는 잘 모르겠어요 문제가지도의 내 구현 내 생각 볼 곳. 지도에서 std : sort 알고리즘을 사용하려면 어떻게해야합니까?

또한 내지도를 std : sort (iterator.begin(), iterator.end(), compareFunction)에서 사용할 수있게 만들 수 있습니까?

[편집] 가 우는 소리가 컨테이너에 shared_ptr를 사용하여 특정 문제를 해결하기 위해 내 Map.h http://pastebin.com/rACeK5av

+0

수업을 보여줄 수 있습니까? – Shoe

+0

정확하게 문제는 아니지만 올바른 테스트라고 생각합니다. '팬'개체가 정렬 가능 (즉, 연산자 <올바르게 구현 됨)이라는 보장을 위해'std :: map '으로 먼저 테스트 했습니까? –

+0

@ wesley.mesquita, 문제는 내지도가 팬이 아닌 shared_ptr 을 보유하고 있으며이를 처리하는 방법을 모르겠다는 것입니다. –

답변

1

, 당신은 사용자 정의 비교 함수를 구현할 수 있습니다.

예를 들어, C++ 11 인 경우 std::sort(connectedFans.begin(), connectedFans.end(), [&](std::shared_ptr<Fan> fanA, std::shared_ptr<Fan> fanB) {return *fanA < *fanB;}과 같은 람다 식을 사용하십시오. @ C++ 11 env가 아닌 경우 std :: function을 찾으십시오.