Название: (Q)Map последних значений Отправлено: Igors от Июнь 01, 2015, 13:59 Добрый день
Есть мапа, напр QMap <int, int> которая хранит последние значения, типа "истории". Как удобнее (или проще всего) ограничить ее размер? Напр макс 100, если добавляется 101-й, то "самый старый" эл-т удалится. Спасибо Название: Re: (Q)Map последних значений Отправлено: Hellraiser от Июнь 01, 2015, 14:02 А чем QCache не угодил?
Название: Re: (Q)Map последних значений Отправлено: Bepec от Июнь 01, 2015, 14:34 int QMap::count () const
или int QMap::size () const Плюс ваш велосипед в виде условий удаления. Название: Re: (Q)Map последних значений Отправлено: Igors от Июнь 02, 2015, 08:35 А чем QCache не угодил? Очень даже угодил - просто забыл о нем :) СпасибоВсе-таки интересно - а без готового класса как? Забыв о QCache я задействовал QMap и QLinkedList - получилось десятка 2 строк. С тем же успехом можно std::map + std::list - но нет ли чего-то получше? Название: Re: (Q)Map последних значений Отправлено: Racheengel от Июнь 12, 2015, 11:32 Создать лист и в него паковать ключи мапы при вставке нового элемента.
Как только переполнился - первый ключ нафиг. Типа: Код:
Ну, наверное, надо будет еще на возможные повторы проверять, но эт смотря что надо по логике. Название: Re: (Q)Map последних значений Отправлено: Igors от Июнь 12, 2015, 11:50 Ну, наверное, надо будет еще на возможные повторы проверять, но эт смотря что надо по логике. А что "не проверять" имеет какой-то смысл? :) Тогда приведите пример когда usable и без проверки - я такого не вижу Название: Re: (Q)Map последних значений Отправлено: Racheengel от Июнь 12, 2015, 13:22 Если usable и без проверки - то допустим, когда точно известно, что все ключи уникальные (например, Timestamps).
А если они не уникальны - какая предполагается логика? Переписать существующее значение в мапе новым или же убить старое и добавить новое "в хвост"? Название: Re: (Q)Map последних значений Отправлено: Igors от Июнь 12, 2015, 13:46 Если usable и без проверки - то допустим, когда точно известно, что все ключи уникальные (например, Timestamps). Тогда и мапы никакие не нужны, контейнер и push_back/pop_front А если они не уникальны - какая предполагается логика? Переписать существующее значение в мапе новым или же убить старое и добавить новое "в хвост"? Зачем задавать вопрос если ответ ясен хотя бы из названия темы (последних)? :) Новая пара ключ-значение сохраняется в мапе всегда, но для мапы есть предел роста, "самые старые" значения должны вытесняться. Название: Re: (Q)Map последних значений Отправлено: Racheengel от Июнь 12, 2015, 16:01 Цитировать Новая пара ключ-значение сохраняется в мапе всегда, но для мапы есть предел роста, "самые старые" значения должны вытесняться. Дык, я поэтому и спрашиваю - по какому принципу? Объясню, что имею в виду. Допустим, есть мапа типа [A,10][B,15][C,20]...[E,10][K,100500] Теперь мы в нее запихиваем [A, 55]. В мапе уже есть значение [A,10]. Оно, естественно, перепишется на [A,55], но вопрос: должно ли "новое" значение A=55 пониматься как "последнее вставленное", либо оно просто становится на место старого ключа? Т.е. так: [B,15][C,20]...[E,10][K,100500][A,55] или так: [A,55][B,15][C,20]...[E,10][K,100500] ? При добавлении следующего значения, например, [X,666], как должна выглядеть история? [C,20]...[E,10][K,100500][A,55][X,666] или так: [B,15][C,20]...[E,10][K,100500][X,666] ? Т.е. в первом случае A осталось, во втором - вылетело. Название: Re: (Q)Map последних значений Отправлено: Igors от Июнь 13, 2015, 06:03 В мапе уже есть значение [A,10]. Оно, естественно, перепишется на [A,55], но вопрос: должно ли "новое" значение A=55 пониматься как "последнее вставленное", Конечно должно, ведь обращение по ключу A было последнимТ.е. так: В мапе Вы не можете управлять порядком (на то она и мапа). Если Вы имели ввиду список, то первый вариант[B,15][C,20]...[E,10][K,100500][A,55] или так: [A,55][B,15][C,20]...[E,10][K,100500] ? Название: Re: (Q)Map последних значений Отправлено: Racheengel от Июнь 15, 2015, 17:29 Ну, я имел в виду порядок в "хистори". Но не суть :) Если с QCache все работает, то хорошо
|