У меня есть карта векторов в C++. Для каждого вектора я хотел бы удалить записи, удовлетворяющие определенному условию. Если вектор заканчивается пустым, я хотел бы удалить его с карты. Я знаю, что удаление может испортить итераторы, и повторное повторение делает это еще более запутанным для меня. Каков наилучший способ сделать это?Как перебирать карту векторов при удалении?
0
A
ответ
4
Стандартный цикл Mutating Контейнер:
for (auto it = m.begin(); it != m.end();)
{
// work
if (/* need to delete */) // e.g "if (it->second.empty())"
{
it = m.erase(it);
}
else
{
++it;
}
}
0
Вот показательная программа, которая показывает, как это можно сделать
#include <iostream>
#include <map>
#include <vector>
int main()
{
std::map<int, std::vector<int>> m =
{
{ 1, { 1, 2 } },
{ 2, { 2 } },
{ 3, { 3, 4 } },
{ 4, { 4 } }
};
for (const auto &p : m)
{
std::cout << p.first << ": ";
for (int x : p.second) std::cout << x << ' ';
std::cout << std::endl;
}
for (auto it = m.begin(); it != m.end();)
{
it->second.erase(it->second.begin());
if (it->second.empty()) it = m.erase(it);
else ++it;
}
std::cout << std::endl;
for (const auto &p : m)
{
std::cout << p.first << ": ";
for (int x : p.second) std::cout << x << ' ';
std::cout << std::endl;
}
return 0;
}
Выход программы
1: 1 2
2: 2
3: 3 4
4: 4
1: 2
3: 4
Смежные вопросы
- 1. Как перебирать вектор векторов
- 2. Как перебирать слабую карту?
- 3. Как перебирать карту в XQuery?
- 4. Как перебирать карту в jsp?
- 5. C++: перебирать вектор множества векторов
- 6. положите векторов на карту
- 7. Показать карту двух векторов
- 8. Как перебирать карту при одновременном добавлении к ней значений?
- 9. Как перебирать карту, изменять карту, но восстанавливать на каждой итерации?
- 10. Как перебирать отсортированную карту с одинаковым заказом?
- 11. Как перебирать карту в golang по порядку?
- 12. Как перебирать карту, содержащую набор в C++?
- 13. Как перебирать карту, созданную в MVEL
- 14. Как перебирать карту объектов с помощью .next()?
- 15. объединить карту и список векторов и списков
- 16. Как перебирать карту в java, чтобы рассчитать разницу?
- 17. Как перебирать карту с помощью Foreach в муле?
- 18. Как перебирать вложенную карту и мультимножество? - Java/Guava
- 19. Как перебирать карту со значением в виде списка?
- 20. Как перебирать карту STL (найти все возможные пары)
- 21. Как перебирать хэш-карту и помещать в структуру массива/списка?
- 22. Как заполнить карту строки и пару векторов double
- 23. Как перебирать список при удалении элементов из списка с помощью функции range()?
- 24. Как удалить настройки при удалении
- 25. Как сохранить файл при удалении
- 26. Как проверить строку при удалении?
- 27. Как выполнить CASCADE при удалении?
- 28. Как удалить webhooks при удалении
- 29. Как удалить WebApplication при удалении?
- 30. Symfony2: Отключить ассоциации при удалении
Небольшой код контекст поможет здесь. – tadman
Вообще говоря, полезно показать свои попытки, которые вы пробовали ... редко подходит для публикации вопроса, не включая некоторые из вашего кода. –
Это дубликат http://stackoverflow.com/questions/8234779/how-to-remove-from-a-map-while-iterating-it – qexyn