作为家庭作业的一部分,我必须实现一个类似于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.
我认为问题出在我的Map实现中,但是我不确定在哪里看。 我应该怎么做我的地图上的std:sort算法来处理它?</ p>
另外,如何使我的Map可用于std:sort(iterator.begin(),iterator.end(),compareFunction)?
[编辑] 贝娄是我的Map.h http://pastebin.com/rACeK5av
答案 0 :(得分:1)
要解决在容器中使用shared_ptr
的具体问题,可以实现自定义比较功能。
例如,如果您使用的是C ++ 11,请使用类似std::sort(connectedFans.begin(), connectedFans.end(), [&](std::shared_ptr<Fan> fanA, std::shared_ptr<Fan> fanB) {return *fanA < *fanB;}
的lambda表达式。如果您不是@ a C ++ 11 env,请查找std :: function。