Russian Qt Forum

Qt => Общие вопросы => Тема начата: vanessa от Апрель 08, 2010, 22:13



Название: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: vanessa от Апрель 08, 2010, 22:13
Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?


Название: Re: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: MoPDoBoPoT от Апрель 08, 2010, 23:40
Для поиска есть QStringList::indexOf(), QList::indexOf()...
Ну а вообще, чтобы узнать индекс итератора, можно сделать, например, так:
Код
C++ (Qt)
...
QList<QString>::iterator result = qFind(list.begin(), list.end(), "val");
int index = result - list.begin();
...
 


Название: Re: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: niXman от Апрель 09, 2010, 05:20
MoPDoBoPoT, крайне опасный способ. не со всеми типами итераторов такое прокатит. с вектором прокатит, со списком не факт.
для этого есть "std::distance()", который для разных типов итераторов, использует разные методы для расчета дистанции.


Название: Re: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: Igors от Апрель 09, 2010, 11:48
Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?
Как вытянуть уже ответили, добавлю: такой поиск дорогостоящий - это просто линейный перебор в неупорядоченном массиве, без разницы ищете ли Вы сами или используете ф-цию. Если надо находить быстро используйте специализированный контейнер напр. QSet


Название: Re: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: MoPDoBoPoT от Апрель 09, 2010, 12:27
MoPDoBoPoT, крайне опасный способ. не со всеми типами итераторов такое прокатит. с вектором прокатит, со списком не факт.
для этого есть "std::distance()", который для разных типов итераторов, использует разные методы для расчета дистанции.
Возможно, но этот способ я взял из официальной документации и там на этот счет ничего не сказано. Но все равно буду иметь ввиду, спасибо.


Название: Re: Поиск в QStringList: элемент найден, как опредилить индекс?
Отправлено: vanessa от Апрель 09, 2010, 13:56
Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?
Как вытянуть уже ответили, добавлю: такой поиск дорогостоящий - это просто линейный перебор в неупорядоченном массиве, без разницы ищете ли Вы сами или используете ф-цию. Если надо находить быстро используйте специализированный контейнер напр. QSet
Спасибо, я тоже об этом подумал, но использовал QHash, говорят оно быстрее ищет.