Russian Qt Forum
Ноябрь 23, 2024, 03:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: оператор < для указателей  (Прочитано 8413 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Декабрь 19, 2014, 17:14 »

А на вставку и нахождение других значений никак не повлияет?
Необязательно загнется, но при вставках/удалениях начнет лупить как попало. Когда сортируем функтором/лямбдой (вместо оператора <) - имеем те же "шансы на успех"  Улыбающийся

А константность здесь не к месту. напр
Код
C++ (Qt)
std::vector <CComparedPtr<MyStruct> > vec;
..
std::sort(vec.begin(), vec.end());
И теперь нельзя менять содержимое - придется const_cast
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #16 : Декабрь 19, 2014, 19:12 »

А константность здесь не к месту. напр
...
И теперь нельзя менять содержимое - придется 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;
}
 
« Последнее редактирование: Декабрь 19, 2014, 19:25 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Декабрь 20, 2014, 08:15 »

Сортироваться будут враперы (которые не константные), а вовсе не константные указатели.
Будут, но что потом делать с отсортированным?
Код
C++ (Qt)
const T operator*() const { return *ptr; }
 
Ой  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #18 : Декабрь 20, 2014, 09:02 »

Будут, но что потом делать с отсортированным?
Вы хотели получить из указателя ключ, предполагаю, что вы будете смотреть порядок этих ключей.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.304 секунд. Запросов: 23.