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

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Август 21, 2011, 11:29 »

Я подумал и остановился на ассоциативных массивах. Получилось плоско, но вроде бы попроще Улыбающийся
Это решает одну задачу (получить ID по имени). А если надо имя по ID? А если есть 2 или более ID с тем же именем или наоборот? Надо считать хотя бы на 1 ход вперед  Улыбающийся
Записан
surendil
Гость
« Ответ #16 : Август 21, 2011, 13:28 »

Я подумал и остановился на ассоциативных массивах. Получилось плоско, но вроде бы попроще Улыбающийся
Это решает одну задачу (получить ID по имени). А если надо имя по ID? А если есть 2 или более ID с тем же именем или наоборот? Надо считать хотя бы на 1 ход вперед  Улыбающийся
ID по имени? Мне наоборот нужно Улыбающийся для очередного USB устройства я получаю VendorID и ProductID, для которых нужно получить соответственно, название производителя и устройства. ID производителей не повторяются, устройств, полагаю, тоже.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Август 21, 2011, 18:10 »

ID по имени? Мне наоборот нужно Улыбающийся для очередного USB устройства я получаю VendorID и ProductID, для которых нужно получить соответственно, название производителя и устройства. ID производителей не повторяются, устройств, полагаю, тоже.
Нужно также полагать что

- 2 "просто одинаковых" устройств быть не может
- показать/напечатать все устройства такого-то вендора не требуется
- не требуется  даже печатать устройства в том порядке что они обнаружены

Иначе Ваша реализация не проходит (наверное требования слишком завышены  Улыбающийся)
Записан
surendil
Гость
« Ответ #18 : Август 21, 2011, 23:28 »

Нужно также полагать что

- 2 "просто одинаковых" устройств быть не может
- показать/напечатать все устройства такого-то вендора не требуется
- не требуется  даже печатать устройства в том порядке что они обнаружены

Иначе Ваша реализация не проходит (наверное требования слишком завышены  Улыбающийся)
Я правильно понимаю, что ваши дополнения - это ограничения на пользователя этой адской конструкции? Тогда "просто одинаковые" устройства фильтруются ещё до того как, в исходных данных повторяющихся пар вендор-продакт нету. Показывать-печатать устройства вендора тоже не надо - и вряд ли понадобится когда-либо. Порядок устройств определяется датой установки в систему, так что отпадает как и всё остальное.

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

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Август 22, 2011, 09:48 »

Зачем всё это, если от реализации требуется всего лишь адекватно отвечать на чётко поставленный (один) вопрос?
Вернемся к вопросу-первоисточнику

Я хочу сделать QList< USBID* > и искать их по indexOf().
Отсюда я делаю вывод что у Вас имеется набор (массив, контейнер) USBID имеющих vendorID. productID (ключ). Наверное у Вас есть набор устройств (откуда-то получен) и задача найти/проверить есть ли устройство с такими-то ID в Вашем списке. Если это не так - поясните, потому что не видно что еще здесь может иметь смысл.
Записан
surendil
Гость
« Ответ #20 : Август 23, 2011, 09:22 »

Да, всё верно. Я получаю из реестра имена ключей, из них регулярным выражением добываю VID и PID. Есть файл USB.IDS. Задача сводится к тому, чтобы для очередного устройства с VID и PID получить название компании-производителя и название устройства.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Август 23, 2011, 10:20 »

Да, всё верно. Я получаю из реестра имена ключей, из них регулярным выражением добываю VID и PID. Есть файл USB.IDS. Задача сводится к тому, чтобы для очередного устройства с VID и PID получить название компании-производителя и название устройства.
Ага, а я-то думал у Вас расширяемый список устройств. Ну тогда не видно зачем городить какие-то свои классы если это решается на встроенных

Код
C++ (Qt)
typedef int TID;
typedef QHash <TID, QString> TProductHash;
typedef QPair <QString, TProductHash> TVendor;
typedef QHash <TID, TVendor> TVendorHash;
 
TVendorHash vendorHash;
 
// заполняем vendorHash из текстовика
 
bool Lookup( TID vendorID, QString & vendorName, TID productID, QString & productName )
{
TVendorHash::const_iterator itV = vendorHash.find(vendorID);
if (itV == vendorHash.end()) return false;
const TVendor & vendor = *itV;
vendorName = vendor.first;
TProductHash::const_iterator itP = vendor.second.find(productID);
if (itP == vendor.second.end()) return false;
productName = *itP;
return true;
}
 
Записан
surendil
Гость
« Ответ #22 : Август 23, 2011, 15:50 »

О, а я про QPair не знал Улыбающийся
Спасибо вам за помощь Веселый
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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