|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.02.2011, 00:58 | #1 |
Форумчанин
Регистрация: 12.01.2011
Сообщений: 186
|
[Qt] QList и indexOf
Допустим есть класс с двумя полями
Код:
Требуется организовать поиск в QList как по ID так и по name. QList::indexOf, как я понял, подходит только для поиска по одному полю. Есть ли какой хитрый способ все это организовать (полей естественно может быть не два) или по-старинке искать перебором вручную?
Lingua c++ non penis caninus est.
|
14.02.2011, 03:43 | #2 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Ничего хитрого.
Код:
Код:
Можно сделать конструктор у SomeClass приватным и разрешить им пользоваться только классу SomeClassList: Код:
Код:
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 14.02.2011 в 04:03. |
14.02.2011, 03:46 | #3 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Хотя лично мне такая идея не по нраву совсем, грязко и гадко. Лучше сделать SomeClassList с методами indexOfByName(const QString &name, int from = 0) const и аналогичным для ID, а их сделать по аналогии с indexOf в Qt: http://qt.gitorious.org/qt/qt/blobs/...list.h#line825
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 14.02.2011 в 04:11. |
14.02.2011, 16:48 | #4 |
Форумчанин
Регистрация: 12.01.2011
Сообщений: 186
|
Интересно. Про наследование от QList я как-то не подумал.
Тогда быть может лучше перегрузить операторы сравнения: Код:
Правда работать будет только в пределах разных типов. Если надо будет искать по двум QString полям (скажем name и description), то без статического поля не обойтись. Edit: Пфф, совсем забыл, что из indexOfXYZ вызывается стандартный indexOf, значит только статические поля.
Lingua c++ non penis caninus est.
|
14.02.2011, 17:11 | #5 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Лучше просто унаследуй QList и сделай там 2 метода по аналогии с http://qt.gitorious.org/qt/qt/blobs/...list.h#line825
А то со статическим полем решением грязное какое-то
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
14.02.2011, 17:32 | #6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
А ещё красивей сделать как в сшарпе — научить* один раз QList работать с интерфейсом IComparer и пописывать себе компараторы по мере необходимости:
Код:
(* научить — т.е. создать свой класс, наследованный от).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 14.02.2011 в 17:36. |
14.02.2011, 17:35 | #7 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Компараторы и в плюсах можно делать, обычные указатели на функции.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 14.02.2011 в 17:41. |
14.02.2011, 17:38 | #8 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Вот и прекрасно, что можно, я и не сомневался. Осталось скрестить их с QList и будет красивое решение.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
14.02.2011, 17:44 | #9 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
тогда уж можно сделать просто шаблонный indexOf, а он тупо будет использовать соответствующий operator==, и никаких компараторов не надо.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
14.02.2011, 17:58 | #10 |
Форумчанин
Регистрация: 12.01.2011
Сообщений: 186
|
Тогда придется внутри indexOf перебирать вручную.
Lingua c++ non penis caninus est.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
indexOf | Progsenya | JavaScript, Ajax | 2 | 05.12.2010 12:29 |
memo и IndexOf | grafgrial | Общие вопросы Delphi | 4 | 12.08.2010 07:16 |
IndexOf | Cpluser | Microsoft Office Excel | 0 | 17.05.2010 18:11 |
Indexof | Cpluser | Microsoft Office Excel | 1 | 09.04.2010 04:52 |
Не применяется параметр Options для Table1.IndexDefs.IndexOf[i] | adriano | БД в Delphi | 8 | 04.03.2009 18:07 |