А константность здесь не к месту. напр
...
И теперь нельзя менять содержимое - придется const_cast
Не придумывайте, константность здесь не помешает. Сортироваться будут враперы (которые не константные), а вовсе не константные указатели.
C++ (Qt)
template <class T>
class pointer_wrapper
{
public:
pointer_wrapper( const T * p ) : ptr( p ) {}
const T operator*() const { return *ptr; }
template <class R>
friend bool operator<( const pointer_wrapper<R> &, const pointer_wrapper<R> & );
private:
const T * ptr;
};
template <class R>
bool operator<( const pointer_wrapper<R> &x, const pointer_wrapper<R> &y )
{
return *(x.ptr) < *(y.ptr);
}
typedef pointer_wrapper<int> Value;
int main( int argc, char *argv[] )
{
std::vector<Value> vec;
vec.push_back( Value( new int( 9 ) ) );
vec.push_back( Value( new int( 1 ) ) );
vec.push_back( Value( new int( 7 ) ) );
vec.push_back( Value( new int( 2 ) ) );
vec.push_back( Value( new int( 5 ) ) );
foreach( const Value &v, vec )
qDebug() << *v;
std::sort( vec.begin(), vec.end() );
foreach( const Value &v, vec )
qDebug() << *v;
return 0;
}