Size: a a a

2021 July 07

МК

Мгер Карапетян... in Qt
Спасибо за ответ, идея понятная. Вот только мне нужно что бы объекты не дублировались внутри контейнера(то есть быстрый поиск по ключу и уже изменение его значения).
источник

П

Пашечка in Qt
А, тем более херню предложил...
источник

А

Ананданатх in Qt
Можно попробовать положить все в один вектор, и сортировать в зависимости от потребностей. И держать контейнер отсортированным так, чтобы было быстрее делать те операции, которые чаще нужны. Если, например, заранее известно, что сначала в контейнер делается много insert, а после этого уже только одни mostCommon, то можно после завершения добавления элементов переключить сортировку, и больше не трогать.
https://godbolt.org/z/PWf5x9cd4
источник

МК

Мгер Карапетян... in Qt
Спасибо, очень красивый код. Почему по умолчанию не использовать map вместо vector?
источник

МП

Михаил Притугин... in Qt
Подскажите, как можно в 6 версии работать с Zip файлами.
А еще конкретнее, как можно работать с байтами, который являются Zip файлом?
источник

А

Ананданатх in Qt
Если вектора хватает, стараюсь им пользоваться. Оно компактно в памяти лежит, а не разбросано по всей куче.
источник
2021 July 08

AS

Anatoly Shirokov in Qt
экономный вариант без лишнего копирования ключей может выглядеть так:
#include <QDebug>
#include <QList>
#include <QString>

#include <map>
#include <span>
#include <vector>

class Histogram {
   using CounterMap = std::map<QString, int>;
   CounterMap m_counter;
   mutable bool m_invalidated = false;
   mutable std::vector<CounterMap::const_iterator> m_order;

public:
   void append(QString key)
   {
       m_counter[std::move(key)]++;
       m_invalidated = true;
   }
   std::span<CounterMap::const_iterator> top(size_t n = 0) const
   {
       if (m_invalidated) {
           reorder();
       }
       if (!n) {
           n = m_counter.size();
       }
       return std::span(m_order.begin(), n);
   }

private:
   void reorder() const
   {
       m_order.clear();
       m_order.reserve(m_counter.size());
       for (auto&& it = m_counter.begin(); it != m_counter.end(); ++it) {
           m_order.emplace_back(it);
       }
       std::sort(m_order.begin(), m_order.end(), [](auto&& a, auto&& b) {
           return b->second < a->second;
       });
       m_invalidated = false;
   }
};

int main(int, char*[])
{
   Histogram historam;
   QList<QString> keys { "one", "two", "three", "one", "three", "one" };
   for (auto&& key : keys) {
       historam.append(key);
   }
   auto&& top = historam.top();
   for (auto&& e : top) {
       qDebug() << e->first << e->second;
   }
}
источник

AS

Anatoly Shirokov in Qt
основная идея заключается в том, чтобы финальную сортировку по частотам выполнять лениво, по требованию
источник

AS

Anatoly Shirokov in Qt
а результат метода, который должен вернуть topMost ключи по частотам сделать легковесным за счет возврата span-a
источник

#

#Аки 노부아키🌚... in Qt
я только приступил к изучению QtC, не могли бы вы объяснить, показать где именно ошибка? код я писал по урокам Дударя.
источник

#

#Аки 노부아키🌚... in Qt
у других код работает корректно
источник

AS

Anatoly Shirokov in Qt
Прочитал ошибку?
источник

#

#Аки 노부아키🌚... in Qt
прочитал, но что именно исправить когда этот код должен так работать, я еще только начинающий...
источник

П

Пашечка in Qt
Замени в этой строке all_numbers на new_label.
источник

AS

Anatoly Shirokov in Qt
Напиши там где ошибка new_label
источник

П

Пашечка in Qt
А потом сиди и разбирайся, что такое типы данных и чем они отличаются.
источник

AS

Anatoly Shirokov in Qt
Да, и код этот не мог у других работать
источник

П

Пашечка in Qt
Да рабочего кода всего одно исправление. Скорее не то скопировал, что надо. Не ругайтеся, насяльника
источник

m

mefest in Qt
Ну надо и своей головой думать, а не заявлять что код должен работать. Иначе так далеко не уедешь
источник

#

#Аки 노부아키🌚... in Qt
спасибо😅 теперь в коде ошибок нет, но QLabel так же не отвечает
источник