Как получить список родительских элементов из списка элементов-членов в qt / C ?

#c #qt

#c #qt

Вопрос:

У меня есть структура —

 struct uid
{
 quint64 id;
 quint64 parent;
 enum_src src;

};
 

Теперь у меня есть qlist из uid.id . Как я могу получить из него список uid?
Я не хочу проходить по циклу for и т.д. Есть ли у вас какой-либо эффективный способ сделать это?

Комментарии:

1. Как вы можете получить uid из uid.id ? Другими словами, как вы собираетесь получить структуру из числа?

2. Да, это то, чего я хочу достичь. Помните, что в нем нет указателя. Это просто число, которое совпадает с идентификатором элемента структуры.

3. Где хранится соответствующая структура? Если у вас есть только число, вы не можете волшебным образом получить из него структуру.

4. Если вы можете гарантировать, что каждый id из них уникален, вы можете создать параллельную хэш-таблицу, которую можно использовать для получения указателя на uid искомый объект. Сложность равна O (1), но стоимость — это дополнительная переменная для управления и дополнительная память.

Ответ №1:

в вашем примере id — это просто число. Вам нужно создать что-то, чтобы ваша программа знала, что это число является идентификатором для uid.

Единственный способ, который я могу придумать, чтобы сделать это без использования каких-либо «циклов и т. Д.», — это сохранить все ваши uid в QHash с идентификатором в качестве ключа. Так что это было бы так:

 //establish the has that indexes your uids by their id
QHash<quint64, uid> idToUidHash;

uid first;
uid second;
first.id = 1;
second.id = 2;

idToUidHash.insert(1,first);
idToUidHash.insert(2,second);

//Now just get it back out
QList<uid> theUidIWant;
theUidIWant = itToUidHash.values(1);
 

Для записи я думаю, что это действительно уродливый код, и вам следует пересмотреть то, как вы структурируете свои данные. Извините, но я не чувствую, что могу дать какие-либо хорошие рекомендации, не зная больше вашей ситуации.

Ответ №2:

Используйте a QMap<quint64,uid> для хранения объектов.