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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск в QStringList: элемент найден, как опредилить индекс?  (Прочитано 7241 раз)
vanessa
Гость
« : Апрель 08, 2010, 22:13 »

Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Апрель 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();
...
 
Записан
niXman
Гость
« Ответ #2 : Апрель 09, 2010, 05:20 »

MoPDoBoPoT, крайне опасный способ. не со всеми типами итераторов такое прокатит. с вектором прокатит, со списком не факт.
для этого есть "std::distance()", который для разных типов итераторов, использует разные методы для расчета дистанции.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 09, 2010, 11:48 »

Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?
Как вытянуть уже ответили, добавлю: такой поиск дорогостоящий - это просто линейный перебор в неупорядоченном массиве, без разницы ищете ли Вы сами или используете ф-цию. Если надо находить быстро используйте специализированный контейнер напр. QSet
« Последнее редактирование: Апрель 09, 2010, 13:46 от Igors » Записан
MoPDoBoPoT
Гость
« Ответ #4 : Апрель 09, 2010, 12:27 »

MoPDoBoPoT, крайне опасный способ. не со всеми типами итераторов такое прокатит. с вектором прокатит, со списком не факт.
для этого есть "std::distance()", который для разных типов итераторов, использует разные методы для расчета дистанции.
Возможно, но этот способ я взял из официальной документации и там на этот счет ничего не сказано. Но все равно буду иметь ввиду, спасибо.
Записан
vanessa
Гость
« Ответ #5 : Апрель 09, 2010, 13:56 »

Я конечно могу и сам поискать, но зачем, когда есть qFind, вот только меня интересует не сам элемент а его индекс в списке. Можно как-то из итератора вытянуть индекс найденного  элемента ? Или я не в ту сторону пошел ?
Как вытянуть уже ответили, добавлю: такой поиск дорогостоящий - это просто линейный перебор в неупорядоченном массиве, без разницы ищете ли Вы сами или используете ф-цию. Если надо находить быстро используйте специализированный контейнер напр. QSet
Спасибо, я тоже об этом подумал, но использовал QHash, говорят оно быстрее ищет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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