刷新问题 - 问题重新编写 - 我有一个需求,我需要用一个新的键和值替换一个对。考虑这个 -如何在std multimap中替换<key, value>
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
std::multimap<unsigned int, std::string> mymap;
mymap.insert(std::multimap<unsigned int, std::string>::value_type(0, "A1"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(0, "A2"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(2, "C1"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(2, "C2"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(1, "B1"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(1, "B2"));
mymap.insert(std::multimap<unsigned int, std::string>::value_type(1, "B3"));
std::pair<std::multimap<unsigned int, std::string>::iterator, std::multimap<unsigned int, std::string>::iterator> pr = mymap.equal_range(1);
std::multimap<unsigned int, std::string>::iterator it;
for (it=pr.first; it!=pr.second; ++it)
{
unsigned int key = it->first;
key = key+10;
std::string val = it->second;
val = "X" + val;
mymap.erase(it);
mymap.insert(std::multimap<unsigned int, std::string>::value_type(key, val));
}
for (it=mymap.begin() ; it != mymap.end(); it++)
{
cout << (*it).first << " => " << (*it).second << endl;
}
return 0;
}
该程序在Visual Studio 2008中崩溃,因为迭代器失效。
我希望它是:
0 => A1
0 => A2
2 => C1
2 => C2
11 => XB1
11 => XB2
11 => XB3
的想法是我想要替换地图的新条目的现有条目。
我在做什么错?非常感谢任何帮助。
不错,我喜欢这个! – 2012-07-06 03:54:33
许多非常感谢!这种技术适用于这个问题以及我更大的问题。 – tyrion 2012-07-06 04:32:45
我添加了行键=键+10,因为我想证明我的新密钥是基于旧密钥的。事实上,新密钥是通过在不同的数据结构中查找旧密钥而获得的。 – tyrion 2012-07-06 04:40:17