Tôi đang cố gắng xóa một loạt các yếu tố khỏi bản đồ dựa trên điều kiện cụ thể. Làm cách nào để thực hiện điều đó bằng thuật toán STL?
Ban đầu tôi nghĩ đến việc sử dụng remove_if
nhưng không thể vì remove_if không hoạt động cho vùng chứa liên kết.
Có bất kỳ thuật toán tương đương "remove_if" nào hoạt động cho bản đồ không?
Như một lựa chọn đơn giản, tôi nghĩ đến việc lặp lại bản đồ và xóa. Nhưng việc lặp lại bản đồ và xóa có phải là một tùy chọn an toàn không? (Vì các trình lặp sẽ không hợp lệ sau khi xóa)
Tôi đã sử dụng ví dụ sau:
bool predicate(const std::pair<int,std::string>& x)
{
return x.first > 2;
}
int main(void)
{
std::map<int, std::string> aMap;
aMap[2] = "two";
aMap[3] = "three";
aMap[4] = "four";
aMap[5] = "five";
aMap[6] = "six";
// does not work, an error
// std::remove_if(aMap.begin(), aMap.end(), predicate);
std::map<int, std::string>::iterator iter = aMap.begin();
std::map<int, std::string>::iterator endIter = aMap.end();
for(; iter != endIter; ++iter)
{
if(Some Condition)
{
// is it safe ?
aMap.erase(iter++);
}
}
return 0;
}
for(auto iter=aMap.begin(); iter!=aMap.end(); ){ ....}
để giảm bớt sự lộn xộn. Nghỉ ngơi là như những người khác đã nói. Câu hỏi này đã giúp tôi tiết kiệm được một vài sợi tóc vừa rồi ;-)