传入key删除
#include<bits/stdc++.h>
#define ft first
#define sd second
using namespace std;
map<int,double> mp;
int main() {
mp[1]=10;
mp[2]=100;
cout<<"删除前"<<'\n';
for(auto &it: mp){
cout<<it.ft<<" "<<it.sd<<'\n';
}
//key
mp.erase(1);
cout<<"删除后"<<'\n';
for(auto &it: mp){
cout<<it.ft<<" "<<it.sd<<'\n';
}
return 0;
}
迭代器删除
#include<bits/stdc++.h>
#define ft first
#define sd second
using namespace std;
map<int,double> mp;
int main() {
mp[1]=10;
mp[2]=100;
cout<<"删除前"<<'\n';
for(auto it=mp.begin(); it!=mp.end(); it++){
cout<<it->ft<<" "<<it->sd<<'\n';
}
//迭代器
auto it = mp.find(1);
mp.erase(it);
cout<<"删除后"<<'\n';
for(auto &it: mp){
cout<<it.ft<<" "<<it.sd<<'\n';
}
return 0;
}
删除给定范围
#include<bits/stdc++.h>
#define ft first
#define sd second
using namespace std;
map<int,double> mp;
int main() {
mp[1]=10;
mp[2]=100;
mp[3]=3;
mp[5]=9;
mp[10]=101;
cout<<"删除前"<<'\n';
for(auto it=mp.begin(); it!=mp.end(); it++){
cout<<it->ft<<" "<<it->sd<<'\n';
}
//两个迭代器,左闭右开
auto it = mp.find(1);
auto it2 = mp.find(5);
mp.erase(it,it2);
cout<<"删除后"<<'\n';
for(auto &it: mp){
cout<<it.ft<<" "<<it.sd<<'\n';
}
return 0;
}
注意
当使用了自定义排序的时候,遍历删除的时候要注意越界问题
以下代码运行的时候会报错,好像是越界,具体原因我也不太清楚。
#include<bits/stdc++.h>
#define ft first
#define sd second
using namespace std;
map<int,double,greater<int> > mp;
int main() {
mp[1]=10;
mp[2]=100;
for(auto it=mp.begin(); it!=mp.end(); it++){
if(it->ft==1) mp.erase(it);
}
return 0;
}
改成这样就不会了
#include<bits/stdc++.h>
#define ft first
#define sd second
using namespace std;
map<int,double,greater<int> > mp;
int main() {
mp[1]=10;
mp[2]=100;
for(auto it=mp.begin(); it!=mp.end(); ){
if(it->ft==1) it=mp.erase(it);
else it++;
}
return 0;
}