crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Быстрое удаление дубликатов, QList<QPoint>
RazrFalcon
  опции профиля:
сообщение 20.10.2012, 4:45
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Как быстрее всего удалить дубликаты в QList<QPoint>? Может содержать до 100'000 элементов.

Пробовал перед добавлением в list делать проверку list.contains() - но это очень долго выходит. И чем больше список, тем дольше.

Если если другой способ хранить 2-е точки в списке - с удовольствием выслушаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 20.10.2012, 20:38
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


std::set<QPoint> - будет хранить точки без повторения и в отсортированном порядке (согласно оператору <, который придётся определить в субклассе). При попытке добавления повторной точки, новая точка заменит старую (в данном случае ничего не изменится)
std::multiset<QPoint> - всё то же самое, только повторные будут идти друг за другом в списке

субкласс примерно такой

            struct CMyPoint:public QPoint
            {
                bool operator<(const CMyPoint& r)const
                {
                    if(y()<r.y())return true;
                    if(y()>r.y())return false;
                    if(x()<r.x())return true;
                    if(x()>r.x())return false;
                    return false;
                }
            };
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 20.10.2012, 21:21
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Хм, по сути та же проверка наличия, только чуть быстрее и на std?
И вроде так же можно через QSet сделать, но по дефолту он не хавает QPoint.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.10.2012, 7:24
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


по сути это поддержиние неповторности исходя из свойств контейнера )

Цитата(RazrFalcon @ 21.10.2012, 0:21) *
но по дефолту он не хавает


ему тоже нужен оператор <
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2024, 2:58