2018年8月8日 星期三

[C++] Calling erase in reverse iterator

There are some difficulties in using the loop, especially the need to filter out the message.
Share some examples for everyone.

Use multimap associative containers here.
std::multimap<int,std::wstring> List;
List.insert(std::make_pair(1, L"A"));
List.insert(std::make_pair(1, L"B"));
List.insert(std::make_pair(2, L"B"));
List.insert(std::make_pair(3, L"D"));
List.insert(std::make_pair(4, L"E"));
for (std::multimap<int,std::wstring>::reverse_iterator it = List.rbegin(); it != List.rend(); ++it)
{
 if (it->second.find(L"B") != std::wstring::npos) 
 {
  List.erase(std::next(it).base()); 
  it = List.rbegin();
  if (OuthMonitor.empty())
  {
   break;
  }
 }
}
The relationship between it.base() and List is:
List.erase(std::next(it).base());
Then because the iterator has removed one, so specify the original begin.
it = List.rbegin();

Output:
List { size=0x00000003 }
[0x00000001] L"A"
[0x00000003] L"D"
[0x00000004] L"E"

沒有留言:

張貼留言