|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
|
Проход по контейнеру и получение последнего активного значения19.02.2024, 14:37. Показов 1530. Ответов 28
Всем привет.
Есть лист структуры, каждая структура это значение и булево значение активности. Все структуры находятся в строгом порядке, то есть 1,2,3,4,5. Не может быть такого чтобы была ситуация 1,2,5,4,3. Активными могут быть минимум 0 а максимум например 5, и нужно узнать какой последний. Количество активных может меняться постоянно, а значит нужен постоянный проход. Вопрос, как можно такой алгоритм поиска осуществить чтобы быстро находить последний? Иметь дополнительно под каждую структуру еще флаг? Посоветуйте пожалуйста.
0
|
|
| 19.02.2024, 14:37 | |
|
Ответы с готовыми решениями:
28
Проход по какому-либо контейнеру
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 19.02.2024, 15:04 | |
|
Последний это какой? Который последний добавили? Который последний изменили? Который с максимальным значением? Который с минимальным значением?
Елси это "боевой код", я бы вообще не делал проходов, а сделал бы фасад или обертку над конткейнером, в котором бы сохранял "последний" "активный" элемент и изменял его при добавлении/удалении/обновлении.
0
|
|
|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
||
| 19.02.2024, 15:43 [ТС] | ||
|
2 - false 3 - true 4 - false 5 - true вот пример, в данном случаи у последнего элемента статус активности, первым был активен 3 а вторым активен 5, значит мы сообщаем что он активен. 1 - false 2 - false 3 - true 4 - false 5 - false а вот тут активный только 3 элемент а значит он последнйи из всех допустимых активных. Без постоянного прохода и проверок не поулчится, но как сделать проход и быстро сообщить кто из элементов последнйи активный, вот вопрос.
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 19.02.2024, 16:15 | |
|
Что не получится? Почему нельзя изменить способ хранения?
0
|
|
|
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
|
||
| 19.02.2024, 16:26 | ||
|
Самый простой способ - добавить в проект переменную, в которую при каждой активации записывать номер активируемого элемента.
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||
| 19.02.2024, 16:55 | ||
|
Если в коде не контролируются изменения структур внутри контейнера самим контейнером -- единственный оставшимся вариантом будет проход каждый раз. Если все же изменения контролируются, то можно оптимизировать поиск, например храня отсортированный контейнер указателей на "активные" структуры в основном контейнере и при добавлении/удалении/изменении структур менять и контейнер с указателями на "активные" элементы. Таким образом поиск последнего будет за константное время, а время вставки, удаления и изменения элементов увеличится линейно пропорционально размеру контейнера с указателями на "активные" элементы.
0
|
||
|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
||
| 19.02.2024, 18:54 [ТС] | ||
|
Порядок их менятся не может, так же нельзя добавить никаких дополнительных ключей для определения, я могу только работат ьс результатом, за рабоут логики и заполнения контейнера я не отвечаю. Исходя из ваших слов получается у меня будет 1 проход с определением номера какой последний а потом второй проход уже найти это значение и сообщить что он последний.
0
|
||
|
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
|
||
| 19.02.2024, 20:27 | ||
|
Остальные при этом сбрасываются или нет? Сколько всего ключей? Какая частота обновления ключей? В общем случае при проходе нужно создавать копию ключей. При следующем проходе сравнивать копию с новым состоянием ключей, и искать тот, который активировался.
0
|
||
|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
|||||||
| 25.02.2024, 23:25 [ТС] | |||||||
|
Я нашел 1 способ, а тчонее подсказали что в std есть подходящего чтоыб уменьшить количество проходов каждой итерации. Но не знаю как правильно написать, может сможете поправить.
То есть в нормлаьнмо виде какое то число нужно самое последнее активное, а в перевернутом он будет самым первым. Но я не уверен что правильно понимаю как сделать такую запись.
0
|
|||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 25.02.2024, 23:45 | ||
|
Добавлено через 1 минуту SektorCT, то есть, у вас нет точной задачи. И на этом пнх...
0
|
||
|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
|
| 27.02.2024, 13:11 [ТС] | |
|
Может кто подскажет как сделать реверс контейнера и поулчить уже у перевернутого первый нужный мне? Не понимаю как это правильно записать.
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 27.02.2024, 13:15 | ||||||
|
В С++ контейнеры не надо реверсить. Для этого есть функции, начинающиеся с буквы r -- rbegin и rend -- возвращающие реверснутые уже за вас итераторы.
Пример:
0
|
||||||
|
2 / 2 / 0
Регистрация: 22.03.2022
Сообщений: 225
|
||
| 27.02.2024, 13:41 [ТС] | ||
|
Вопрос такой к нему, вот в вашем примере контейнер с индексами чисел 0,1,2. И вот переварачиваем представление и если последнее число нам нужно то как я могу получить его индекс который не реверсивный? Спасибо
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 27.02.2024, 13:43 | |
|
Пересчитай. Ты же знаешь размер.
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||||
| 27.02.2024, 16:54 | |||||||
|
Не стоит забывать, что итератор, возвращаемый rend указывает на следующий за последним элементом, поэтому надо вычесть единицу для получения индекса, начинающегося с нуля. Например так:
Вы что-то делаете не так. Расскажите подробнее, что вы пишете.
0
|
|||||||
|
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||||
| 27.02.2024, 18:51 | ||||||
|
Кликните здесь для просмотра всего текста
struct S{int value, bool status}; vetor<S>vec; и последний измененный - это элемент вектора, структура S с максимальным value? Зачем тогда status и структура вообще? Зачем эта непонятная авадакедабра с реверсом контейнера?(это вопрос к ТС) Ты его хоть переверни, хоть на уши поставь-как это поможет узнать, какой элемент вектора изменился последним?
1
|
||||||
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,029
|
|
| 27.02.2024, 19:01 | |
|
SektorCT, а чем не устроил массив (или список) из пяти указателей ? Новый добавляется в начало, более старые сдвигаются в конец, затирая самый старый
Только при удалении узла из основного списка нужно не забывать удалить указатель из массива
0
|
|
|
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 27.02.2024, 19:42 | |
|
0
|
|
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,029
|
|
| 27.02.2024, 19:45 | |
|
sdf45, точнее - очередь
0
|
|
|
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 27.02.2024, 19:47 | |
|
Алексей1153, угу
0
|
|
| 27.02.2024, 19:47 | |
|
Помогаю со студенческими работами здесь
20
Перемещение по контейнеру и получение значений Получение первого и пОследнего значения методом forEach Получение значения последнего элемента в поле ID списка List<> Получение активного окна
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|