Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
1

QMap из файла

07.07.2012, 18:25. Показов 4276. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравсвуйте, сразу прошу прощения , с Qt начал работать относительно не давно и многое ещё не понятно, пишется словарь, состоящий из 2х файлов первый word.dat вида id, keyword(одно- два слова).
второй файл wordlib.dat вида id, wordlibkey(тут может быть не ограниченный текст) для хранения всего этого безобразия выбрал QMap так как id уникальны этого должно хватить, вопросов возникает много,
1) справится ли QMap с этим так как слов будет 30-50 тысяч соответственно статей столько же.
2) сколько и как это будет считывается из файла и как это можно упростить,
3) как это всё отобразить щас я рассчитываю выводить всё в QplainTextEdit, но опять же учитывая объемы , справится ли это с данной задачей.
заранее благодарен.
P.S. по возможности подскажите кусочек кода именно с загрузкой из файлов в QMap`ы.
Задумывался над использованием БД, Но это не очень хороший вариант, так как программа должна быть портабельной, условно на диск\флешку, если ошибаюсь , прошу исправить с адекватными комментариями.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2012, 18:25
Ответы с готовыми решениями:

Чтение QMap из бинарного файла
Делаю мессенджер, при регистрации записываю логин и пароль пользователя в базу - бинарный файл -...

Преобразование qmap<k,v> в qmap<v,k>
Здравствуйте! Подскажите пожалуйста ни как не могу разобраться как сделать такое преобразование....

QMap и foreach
Добрый день. Споткнулся на простейшем действии и не могу понять причину, почему не работает так,...

QMap обновление
Добрый день. Такой вопрос: мне нужно обновлять содержимое QMap при обновлении некой таблицы в...

13
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.07.2012, 18:33 2
Цитата Сообщение от serg3091 Посмотреть сообщение
справится ли QMap с этим так как слов будет 30-50 тысяч соответственно статей столько же.
Map для этого и предназначен - у него сложность работы с элементами log2(N)
те для 2 элементов условная сложность будет 1, для 1024 - 10, для 1048576 - 20, для 30000 - примерно 15, ну вы поняли

Цитата Сообщение от serg3091 Посмотреть сообщение
2) сколько и как это будет считывается из файла и как это можно упростить,
есть разные варианты хранения, один из вариантов уже готовых в Qt - сереализация
у меня нет сейчас компилятора под рукой - но вот например http://stackoverflow.com/quest... in-qt?rq=1
1
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
07.07.2012, 18:42  [ТС] 3
Цитата Сообщение от alex_x_x Посмотреть сообщение
у меня нет сейчас компилятора под рукой - но вот например http://stackoverflow.com/quest... in-qt?rq=1
с его появлением сможете помочь более детально , если возникнут вопросы?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.07.2012, 18:46 4
будут - попробуем разобраться
0
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
08.07.2012, 15:58  [ТС] 5
Цитата Сообщение от alex_x_x Посмотреть сообщение
будут - попробуем разобраться
не хватает сообразительности( , беру я свой файлик word.dat Загоняю его в поток, всё здорово, а как потом его переложить в Qmap , который объявил вот так
C++ (Qt)
1
QMap<size_t,QString> map;
подскажите плз. и про сериализация Qmap не всё понятно, а именно нашёл вот эту тему описанную вами, Про хороший стиль, если мапа стандартный тип, как обойтись без QByteArray ?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.07.2012, 19:11 6
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QDataStream>
#include <QMap>
 
bool write_map_bin(QMap<size_t,QString>& map, const QString& file) {
    QFile f (file);
    if (!f.open(QIODevice::WriteOnly)) return false;
 
    QDataStream str(&f);
    str << map;
 
    return true;
}
 
bool read_map_bin(QMap<size_t,QString>& map, const QString& file) {
    QFile f (file);
    if (!f.open(QIODevice::ReadOnly)) return false;
 
    QDataStream str(&f);
    map.clear();
    str >> map;
    return true;
}
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    QMap<size_t,QString> map;
 
    map[1] = "a";
    map[2] = "abc";
    map[3] = "hello";
    map[4] = "world";
 
    if (!write_map_bin(map, "1.dat")) {
        qDebug() << "error write";
        return -1;
    }
 
    map.clear();
 
    if (!read_map_bin(map, "1.dat")) {
        qDebug() << "error read";
        return -1;
    }
 
    qDebug() << map;
 
    return a.exec();
}
Это самый простой и самый быстрый способ сохранения
естественно 1.dat оказывается нечитаемым для человека
2
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
09.07.2012, 20:41  [ТС] 7
Цитата Сообщение от alex_x_x Посмотреть сообщение
оказывается нечитаемым для человека
спасибо за помощь, да , но это и не требуется что бы файл был читаем в свободном доступе, единственно, возник вопрос, можно ли потом вносить изменения в поля , скажем
id word
и поменять значения word, так что бы оно переписалось , нормально в файл ?.
прощу прощения на такое большое количество глупых вопросов , с контейнерами особо не приходилось иметь дело.
0
Автор FAQ
2732 / 1428 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
09.07.2012, 20:54 8
можно просто читать построчно в др файл по ходу меняя что необходимо, а затем старый удалить а новые переименовать
0
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
16.07.2012, 16:25  [ТС] 9
Цитата Сообщение от Чистый Посмотреть сообщение
можно просто читать построчно в др файл по ходу меняя что необходимо, а затем старый удалить а новые переименовать
а кроме таких танцев , решений нет?
цели какие есть же word.dat его положили в Qmap, вывели QTextbrowser, потом если что - то нужно изменить жмакнули на выделенном слове и дальше получается, что . нужно изменить Qmap, и только потом загнать обратно в word.dat ? но 35000 слов строк так туда сюда гонять. это накладно ж, или нет
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.07.2012, 16:49 10
Цитата Сообщение от serg3091 Посмотреть сообщение
а кроме таких танцев , решений нет?
цели какие есть же word.dat его положили в Qmap, вывели QTextbrowser, потом если что - то нужно изменить жмакнули на выделенном слове и дальше получается, что . нужно изменить Qmap, и только потом загнать обратно в word.dat ? но 35000 слов строк так туда сюда гонять. это накладно ж, или нет
ну все относительно
удаление записи из файла как ни крути будет нетривиальным
прямое решение тут по сути лишь использование СУБД (ящитаю)

35000 записей при использовании достаточно оптимальной сериализации думаю не будут слишком накладными, тем более это будет происходить лишь раз при выходе из программы
но самое правильное это попробовать
0
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
16.07.2012, 16:55  [ТС] 11
Цитата Сообщение от alex_x_x Посмотреть сообщение
прямое решение тут по сути лишь использование СУБД (ящитаю)
согласен, но возникает сложность в портировании базы, так как программа должна быть портируемая и не лезть в интернет (даже есть БД развернуть где-то удаленно)
Цитата Сообщение от alex_x_x Посмотреть сообщение
но самое правильное это попробовать
Вот в процессе, немного не хватает знаний и опыта.
0
AHT0H
08.01.2013, 02:37 12
SQLite в помощь. Самое удобное решение в данном случае, без всяких танцев.
Хоть и не актуально уже, но мож кому-то еще поможет )
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
08.01.2013, 10:31 13
Я бы это сделал через B-дерево, но не знаю, есть ли у Qt похожие механизмы. А ручками B-дерево рисовать да еще с хранилищем больших текстов - не самая тривиальная задача
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
08.01.2013, 11:47 14
Цитата Сообщение от Байт Посмотреть сообщение
А ручками B-дерево рисовать да еще с хранилищем больших текстов - не самая тривиальная задача
Что там нетривиального? Тема на уровне курсовой по алгоритмам. Вот если захочется кешированных деревьев, то тут действительно сложно будет.
SQLite/Firebird внутри себя используют B-деревья.
0
08.01.2013, 11:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2013, 11:47
Помогаю со студенческими работами здесь

QMap с параметрами
Никак не могу понять принцип работы QMap с параметрами. Например: QMap&lt;QString, int&gt; example(int...

Qmap and QPoint
Здравствуйте, у меня такая проблема, нужно использовать QPoint в Qmap QMap&lt;QPoint,QPoint&gt;...

QMap и QVariant
Привет читающим, вопрос по кусочку кода: #include &lt;QtCore/QCoreApplication&gt; #include &lt;QMap&gt;...

QMap в label
можете подсказать как записать информацию из QMap в Label? или если это не возможно то что можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru