Intruder20 августа 2019 г. 7:04
При обращении к QMap и записи в файл, меняется последовательность выводимой информации
Добрый день, уважаемые Гуру!
Вопрос может и странный, но все таки.
Создаю и добавляю значения
QMap<QString, QString> *map = new QMap<Qstring, QString>(); map->insert("key1", "value1"); map->insert("key2", "value2"); map->insert("key3", "value3");
После читаю данные из словаря и записываю в файл
QMap<Qstring, QString>::iterator it = map->begin(); for(;it != map->end(); ++it) { if(it.key() == "key1") { добавили значение в файл; } if(it.key() == "key2") { добавили значение в файл; } if(it.key() == "key3") { добавили значение в файл; } }
Так вот, при записи одной и той же последовательности также обновляется файл, так как меняется выходная последовательность.
Что я сделал неправильно?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 12 ноября 2024 г. 1:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
Коммутация каналов и пакетов в сетях передачи данных Angioedema 1 priligy dapoxetine
Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
Сейчас обсуждают на форуме
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderChe1 ноября 2024 г. 1:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3 октября 2024 г. 14:05
добрий день, так а що вам заважає зробити по документації? ніколи таких пробелм не виникало
і можна без new
Используешь не тот контейнер. Если хочешь получить последовательный вывод как и добавлял - используй QList. а вообще смотря для каких целей ты все это юзайешь.
Мне нужно чтобы было однозначное соответсвие ключ-значение. Разве QList это позволяет? Если да, то как это реализовать?
вы можете испльзовать QList, просто помещайте туда QPair, будет примерно тоже самое. Просто QMap автоматически сортируется по ключу.
Добрый день.
Я бы хотел добавить, что в вашем коде можно было бы использовать слово auto и цикл for с перебором. Так код получился бы компактнее:
Но не очень ясен вообще смысл подобного перебора, т.к. вы и так можете проверять наличие ключа:
и т.д.
И, как уже сказали ранее, QMap не гарантирует сохранения порядка элементов. Воспользуйтесь другим контейнером, например, как предложил Евгений. Правда, в таком случае вы потеряете возможность обращения по ключу, а также будет возможно возникновение ошибки из-за дублирования ключей.
Александр, добрый день.
Проверка нужна мне для случая, когда в словаре может не оказаться среди ключей того, что мне нужно. А так да, я с Вами полностью согласен. То что предложил Евгений, мне очень понравилось, но это усложняет код. Мне со словарем нравится больше.
Спасибо Вам за помощь.
Вообще, это можно переписать так
Не помню только, какой это стандарт, C++14 или C++17
Евгений, данная конструкция не работает
Я переписал цикл следующим образом, потому что проверка в этом случае не нужна. Мне просто нужно было просто создать атрибуты xml тега. И поэтому в словаре будет лежать только то, что я туда положу.
Но все равно порядок атрибутов внутри тега меняется каждый раз, хотя последовательность одна и та же и в словарь кладется каждый раз в одинаковом порядке.
А сам цикл я переписал вот так:
Но вот почему каждый раз последовательность берется по-разному не понимаю. Единственное предположение - так работает итератор. Можно конечно пойти по пути QList
> map... Попробую.
Данная конструкция работает, но работает при использовании стандарта C++17. Чтобы его включить, необходимо прописать в pro файле следующее
Дело не в работе итератора, а в том, что QMap автоматически сортируется. Я об этом уже говорил выше.
Если вы постоянно что-то добавляете или удаляете, то естественно, что последовательность элементов может изменяться.
Даже если добавляется одно и тоже количество пар "ключ-значение"? Ну если так, то тогда чуть позже перепишу на конструкцию QList.
Если я это напишу, то мне придется весь код писать на новом стандарте или использовать можно будет и старые конструкции?
Евгений,
Даже если добавляется одно и тоже количество пар "ключ-значение"? Ну если так, то тогда чуть позже перепишу на конструкцию QList.
Если я это напишу, то мне придется весь код писать на новом стандарте или использовать можно будет и старые конструкции?
Вам ничего не придётся переписывать, просто получите возможность использовать новый стандарт. Единственные проблемы могут возникать, если вы пишите библиотеку, которую используют другие проекты, которые работают только со старыми стандартами, но это видимо не ваш случай на данный момент.
Спасибо за помощь, Евгений.
и всё равно не понимаю, зачем перебирать всю мапу? можно просто проверять наличие ключа и при его наличии (или отсутствии) делать какие-то действия.
у вас получается избыточный код.
Александр, мне не нужно перебирать. Вы говорите правильно, сначала я написал избыточный код просто не подумав. Задача такая, мне нужно просто переложить из QMap в атрибуты xml тега все, что там лежит. И еще раз повторюсь, изначально я решил задачу в лоб не более того. Вот при перекладывании последовательность атрибутов всегда меняется при неизменности словаря. Поэтому я и спросил почему так, может быть я что-то делаю неправильно.