Tôi có STL Multimap, tôi muốn xóa các mục nhập từ bản đồ có giá trị cụ thể, tôi không muốn xóa toàn bộ khóa, vì khóa đó có thể ánh xạ tới các giá trị khác được yêu cầu.STL Multimap Remove/Erase Values
bất kỳ trợ giúp nào.
Tôi có STL Multimap, tôi muốn xóa các mục nhập từ bản đồ có giá trị cụ thể, tôi không muốn xóa toàn bộ khóa, vì khóa đó có thể ánh xạ tới các giá trị khác được yêu cầu.STL Multimap Remove/Erase Values
bất kỳ trợ giúp nào.
Nếu tôi hiểu chính xác các giá trị này có thể xuất hiện dưới bất kỳ khóa nào. Nếu đó là trường hợp bạn sẽ phải lặp qua multimap của bạn và xóa các giá trị cụ thể.
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// you have to do this because iterators are invalidated
Multimap::iterator erase_iter = iter++;
// removes all even values
if (erase_iter->second % 2 == 0)
data.erase(erase_iter);
}
Có bạn là chính xác, các giá trị có thể xuất hiện dưới bất kỳ khóa nào. – Avinash
Cảm ơn Điều này làm việc cho tôi, tôi đang tìm kiếm bằng cách sử dụng các thuật toán remove_if. – Avinash
Tôi sợ 'remove_if' từ'
Kể từ C++ 11, std::multimap::erase lợi nhuận một iterator sau các yếu tố loại bỏ cuối cùng.
Vì vậy, bạn có thể viết lại câu trả lời Nikola của hơi sạch hơn mà không cần phải giới thiệu biến erase_iter địa phương:
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// removes all even values
if (iter->second % 2 == 0)
iter = data.erase(iter);
else
++iter;
}
(cũng xem câu trả lời để this question)
Một sửa chữa có thể có thể là để trao đổi các khóa và giá trị , điều này có thể không phải là một lựa chọn cho tất cả việc đọc này, nhưng có thể là cho một số người. – dangerousdave