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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: порядок размещение ключей в QHash<int, int>  (Прочитано 27261 раз)
Dendy
Гость
« Ответ #15 : Январь 06, 2009, 05:38 »

Хеш-таблица внутри хеш-таблицы внутри хеш-таблицы уже нездравое решение. Понимаете в чём фишка... Мой опыт программирования показывает, что балансируя на грани "делать как знаю" или "делать по уму" и предпочтя первое - в итоге вы обрастёте свою программу спагетти сомнительного кода. А через время закончится всё это переписыванием "по уму" с тратой драгоценного времени. Если вас не жмёт время - сядьте, осильте SQLite и запихните все своё добро в таблицы.
Записан
Karl-Philipp
Гость
« Ответ #16 : Январь 06, 2009, 12:02 »

Dendy, большое спасибо за наводку. Изучаю SQLite.
Пока не почитал про базы, у меня были сомнения относительно скорости доступа к данным в базах.
Записан
BRE
Гость
« Ответ #17 : Январь 06, 2009, 13:33 »

Есть еще такая штука: http://www.garret.ru/fastdb.html.
Записан
Karl-Philipp
Гость
« Ответ #18 : Январь 06, 2009, 14:43 »

Есть еще такая штука: http://www.garret.ru/fastdb.html.
cпасибо, почитаю обязательно.
Записан
kirill
Гость
« Ответ #19 : Январь 26, 2009, 15:39 »

И что, никого не смутило что QHash действительно сортирует значения по ключу?
Хотя в асистанте написано, что сортировки нету!
Я хотел этим воспрользоваться и словил облом. Вот же блин.

Цитировать
When iterating over a QMap, the items are always sorted by key. With QHash, the items are arbitrarily ordered.

Наглая ложь!
« Последнее редактирование: Январь 26, 2009, 15:44 от kirill » Записан
Karl-Philipp
Гость
« Ответ #20 : Январь 26, 2009, 16:09 »

хотели воспользоваться отсутствием сортировки в QHash? Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #21 : Январь 26, 2009, 16:31 »

2 kirill, тогда тролям писать надо!
Записан

Юра.
ритт
Гость
« Ответ #22 : Январь 26, 2009, 16:42 »

Код:
QHash<QString, int> hash;
for(int i = 0; i < 50; ++i)
hash.insert(QString::number(i), i);
qDebug() << hash;
Записан
kirill
Гость
« Ответ #23 : Январь 26, 2009, 18:29 »

Простой пример
Код:
QHash<QString, QString> hash;
hash.insert("s2", "2");
hash.insert("s1", "1");
QHashIterator<QString, QString> hi(hash);
while (hi.hasNext())
{
hi.next();
qDebug() << hi.key();
}

В Output будет
s1
s2

Хотя мною задумывалось что будет
s2
s1

Записан
Dendy
Гость
« Ответ #24 : Январь 26, 2009, 18:58 »

2 kirill

Вы прежде чем так громко делать заявления почитали бы тему, посмотрели исходники QHash, потестировали.

Вот код:

Код
C++ (Qt)
#include <QHash>
#include <QDebug>
#include <math.h>
 
 
int main( int argc, char ** argv )
{
QHash<QString,QString> hash;
 
qDebug() << "Generating...";
for ( int i = 0; i < 10; ++i )
{
int r = rand();
 
QString key = QString( "Key: %1" ).arg( r );
QString value = QString( "Value: %1" ).arg( r );
 
hash[ key ] = value;
 
qDebug() << "key:" << key << "  value:" << value;
}
 
qDebug() << "Iterating...";
for ( QHashIterator<QString,QString> it( hash ); it.hasNext(); )
{
it.next();
QString key = it.key();
QString value = it.value();
 
qDebug() << "key:" << key << "  value:" << value;
}
 
return 0;
}
 

Вот вывод:
Код:
Generating...
key: "Key: 1804289383"   value: "Value: 1804289383"
key: "Key: 846930886"   value: "Value: 846930886"
key: "Key: 1681692777"   value: "Value: 1681692777"
key: "Key: 1714636915"   value: "Value: 1714636915"
key: "Key: 1957747793"   value: "Value: 1957747793"
key: "Key: 424238335"   value: "Value: 424238335"
key: "Key: 719885386"   value: "Value: 719885386"
key: "Key: 1649760492"   value: "Value: 1649760492"
key: "Key: 596516649"   value: "Value: 596516649"
key: "Key: 1189641421"   value: "Value: 1189641421"
Iterating...
key: "Key: 1957747793"   value: "Value: 1957747793"
key: "Key: 1681692777"   value: "Value: 1681692777"
key: "Key: 1189641421"   value: "Value: 1189641421"
key: "Key: 1804289383"   value: "Value: 1804289383"
key: "Key: 1649760492"   value: "Value: 1649760492"
key: "Key: 596516649"   value: "Value: 596516649"
key: "Key: 424238335"   value: "Value: 424238335"
key: "Key: 846930886"   value: "Value: 846930886"
key: "Key: 1714636915"   value: "Value: 1714636915"
key: "Key: 719885386"   value: "Value: 719885386"

Естественно последовательность случайная. Почему - читайте тему с начала.
Записан
kirill
Гость
« Ответ #25 : Январь 26, 2009, 19:18 »

Понял, спасибо за разъяснения.
А нет ли какого нибудь контейнера, который бы хранил значения в том порядке, в котором заносишь?
Записан
Dendy
Гость
« Ответ #26 : Январь 26, 2009, 19:22 »

Внезапно! QList
Записан
kirill
Гость
« Ответ #27 : Январь 26, 2009, 20:30 »

Хотелось бы ассоциативный массив типа QMap, QHash, чтобы удобно было хранить пары ключ/значение.
Задача простая - есть список свойств, на QMap это было бы как QMap<QString, QString> или QVariantMap. Но эти свойства грузятся из xml файла. и отображать их надо в том порядке, как они записаны в файле. Но QMap взялся сортировать значения по ключу, QHash располагает их в произвольном порядке.
хм.. думаю может быть QList<QPair>.
Записан
ритт
Гость
« Ответ #28 : Январь 26, 2009, 20:47 »

такого контейнера нет и, судя по всему, не будет. сам не раз сталкивался с потребностью в подобном контейнере, сохраняющем последовательность ключей, как QList и в тоже время удобный, как QHash. несколько раз пинал Троллей по этому поводу - ответили, что в ближайшем будущем подобного контейнера не планируется ибо не хотят плодить классы на все случаи жизни; предлагают QList<QPair<..., ...>>

как вариант - отделить и слегка подрезать qhash (небольшое шаманство с таблицей букетов) - и вуа-ля, требуемый контейнер с insertMulti и прочими прелестями готов! но придётся несколько пожертвовать производительностью (мне наспех не удалось избавиться от некоторых механизмов оптимизации QHash, которые только замедляют форкнутый кастрированный класс)
Записан
Tonal
Гость
« Ответ #29 : Январь 27, 2009, 09:47 »

Вообще-то сам алгоритм работы hash-а таков, что данные в нём как можно менее упорядочены. Улыбающийся
Для map (оно упорядоченное дерево) порядок жестко зафиксирован - по возрастанию
Т.е. для сохранения какого-то дополнительного порядка нужно это делать явно.

Ежели не хочется городить свои велосипеды - есть boost.multiindex. Улыбающийся
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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