2014-01-21 48 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)?

[編輯] 貝婁是我Map.h http://pastebin.com/rACeK5av

+0

你能告訴我們你的課程嗎? – Shoe

+0

這不是問題,但我認爲這是一個有效的測試:你是否首先測試了一個'std :: map'來保證'Fan'對象是可排序的(即,正確地實現了'operator'')? –

+0

@ wesley.mesquita,問題是我的地圖佔有shared_ptr 而不是Fan,我不知道如何處理這個。 –

回答

1

爲您解決在使用容器的shared_ptr具體問題,可以實現自定義比較功能。例如,如果您使用的是C++ 11,請使用lambda表達式,如std::sort(connectedFans.begin(), connectedFans.end(), [&](std::shared_ptr<Fan> fanA, std::shared_ptr<Fan> fanB) {return *fanA < *fanB;}。如果您不是@ C++ 11 env,請查找std :: function。