排序自定义容器

时间:2014-01-21 18:43:55

标签: c++

作为家庭作业的一部分,我必须实现一个类似于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

1 个答案:

答案 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。