我有這個示例代碼將條目插入到multimap中。我試圖刪除指定鍵的特定條目。但是這段代碼進入了無限循環。有人可以幫我解決這個問題嗎?在C++中刪除特定鍵的條目STL multimap
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
multimap<string, string> names;
string n;
names.insert(pair<string, string>("Z", "F"));
names.insert(pair<string, string>("Z", "A"));
names.insert(pair<string, string>("S", "T"));
names.insert(pair<string, string>("S", "A"));
names.insert(pair<string, string>("S", "J"));
names.insert(pair<string, string>("D", "H"));
names.insert(pair<string, string>("D", "W"));
names.insert(pair<string, string>("D", "R"));
multimap<string, string>::iterator p;
p = names.find("Z");
if(p != names.end()) { // found a name
do {
cout << n << ", " << p->second;
cout << endl;
if (p->second.compare("A") == 0) {
names.erase(p);
p++;
} else {
p++;
}
} while (p != names.upper_bound("Z"));
}
else{
cout << "Name not found.\n";
}
p = names.find("Z");
if(p != names.end()) { // found a name
do {
cout << n << ", " << p->second;
cout << endl;
} while (p != names.upper_bound("Z"));
}
else{
cout << "Name not found.\n";
}
return 0;
}
在上面我正在查找使用鍵值「Z」並且想要刪除「A」。
@dbrown,我該如何解決這個問題?我試着將迭代器複製到一個臨時的,並使用該臨時迭代器擦除,但它不起作用 – Santhosh
@ skokal01更新了一個示例修復 –