考虑这种情况:
void doSmth1(std::map<int,int> const& m);
void doSmth2(std::map<int,int> const& m) {
std::map<int,int> m2 = m;
m2[42] = 47;
doSmth1(m2);
}
想法是 doSmth2
将调用 doSmth1
并转发它从其调用者收到的 map 。但是,它必须添加一个额外的键值对(或者如果它已经存在则覆盖它)。我想避免为了将附加值传递给 doSmth1
而复制整个内容。
最佳答案
标准 map 无法做到这一点。但如果您的问题非常具体,您可以考虑单独传递新元素:
void doSmth1(std::map<int, int> const & m, int newkey, int newvalue);
void doSmth2(std::map<int, int> const & m)
{
doSmth1(m, 42, 47);
}
更新:如果您真的只想要一张 map ,而复制 map 是不可能的,那么您可以按照@arrowdodger 的建议对原始 map 进行临时修改:
void doSmth2(std::map<int, int> & m)
{
auto it = m.find(42);
if (it == m.end())
{
m.insert(std::make_pair(42, 49));
doSmth1(m);
m.erase(42);
}
else
{
auto original = it->second;
it->second = 49;
doSmth1(m);
it->second = original;
}
}
关于c++ - 如何有效地修改 std::map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251353/