请教STL编程中的一个multimap的erase问题,源码如下
#include<iostream>
#include<string>
#include <hash_map.h>
using namespace std;
struct eqstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) == 0;
}
};
typedef hash_multimap<const char*, int, hash<const char*>, eqstr> map_type;
map_type M;
void lookup(const map_type& Map, const char* str)
{
cout << str << ": ";
pair<map_type::const_iterator, map_type::const_iterator> p =
Map.equal_range(str);
for (map_type::const_iterator i = p.first; i != p.second; ++i)
cout << (*i).second << " ";
cout << endl;
}
void GetPos(const map_type& Map, const char* str)
{
pair<map_type::const_iterator, map_type::const_iterator> p =
Map.equal_range(str);
for (map_type::const_iterator i = p.first; i != p.second; ++i)
{
cout << "find:" << (*i).second << " " << endl;
//添加这句后会编译不过去,我的目的是检索到后立刻erase掉此pos
M.erase(i);
}
cout << endl;
}
int main()
{
M.insert(map_type::value_type("H", 1));
M.insert(map_type::value_type("H", 2));
M.insert(map_type::value_type("C", 12));
M.insert(map_type::value_type("C", 13));
M.insert(map_type::value_type("O", 16));
M.insert(map_type::value_type("O", 17));
M.insert(map_type::value_type("O", 18));
M.insert(map_type::value_type("I", 127));
lookup(M, "I");
lookup(M, "O");
lookup(M, "Rn");
GetPos(M, "O");
}
|