I have a std::set container whose elements are objects of the following class:
class LaneConnector { public: const Lane* getLaneFrom() const { return From; } const Lane* getLaneTo() const { return To; } private: Lane* From; Lane* To; }
and my comparator function is as follows:
struct MyLaneConectorSorter { bool operator() (LaneConnector * c, LaneConnector * d) { Lane* a = const_cast<Lane*>(c->getLaneFrom()); Lane* b = const_cast<Lane*>(d->getLaneFrom()); return (a->getLaneID() < b->getLaneID()); } } myLaneConnectorSorter;
Now when I try to sort the elements in the set with:
//dont panic, the container just came through a const_iterator of a std::map :) const std::set<LaneConnector*> & tempLC = (*it_cnn).second; std::sort(tempLC.begin(), tempLC.end(), myLaneConnectorSorter);
I get a frenzy of errors starting with the following lines, Appreciate if you help me solve this problem. Thanks:
/usr/include/c++/4.6/bits/stl_algo.h: In function ‘void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = std::_Rb_tree_const_iterator<LaneConnector*>, _Compare = {anonymous}::MyLaneConectorSorter]’: /home/.../dev/Basic/shared/conf/simpleconf.cpp:1104:65: instantiated from here /usr/include/c++/4.6/bits/stl_algo.h:5368:4: error: no match for ‘operator-’ in ‘__last - __first’ /usr/include/c++/4.6/bits/stl_algo.h:5368:4: note: candidates are: /usr/include/c++/4.6/bits/stl_iterator.h:321:5: note: template<class _Iterator> typename std::reverse_iterator::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&) /usr/include/c++/4.6/bits/stl_iterator.h:378:5: note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_IteratorL>::difference_type std::operator-(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&) /usr/include/c++/4.6/bits/stl_bvector.h:181:3: note: std::ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&) /usr/include/c++/4.6/bits/stl_bvector.h:181:3: note: no known conversion for argument 1 from ‘std::_Rb_tree_const_iterator<LaneConnector*>’ to ‘const std::_Bit_iterator_base&’