我定义了两个multimaps,因此multimap phoneNums;和multimap numPhones;它们是某种电话注册表 - phoneNums包含密钥名称,第二个参数是phonenumber,numPhones包含Key phonenumber,第二个是name。当我想删除字符串键形式phoneNums时,我想优化它们的擦除,这也是numPhones中的第二个元素。当我输入数据时,它会在两个多重映射中输入,因此它们实际上是相同的,但是先交换第一个和第二个 当我把它放在测试上时,它说擦除太慢 - N * N并且必须只有N
cin>>stringToErase;
phoneNums.erase(stringToErase);
multimap<string, string>::iterator it;
multimap<string, string>::iterator tmpr;
for(it = numPhones.begin(); it != numPhones.end();it++)
{
if(it->second == tringToErase)
{
tmpr = it;
numPhones.erase(it,tmpr);
}
}
答案 0 :(得分:3)
为什么不为 Bimap 等问题使用更合适/特定的数据结构?
Boost有one ..
答案 1 :(得分:3)
更一般地说,对于这类问题,您可以使用以下技术:
如果沿数据放置反向索引(以便指向引用此项目的索引中的位置),则可以有效地删除任何项目:
这可能看起来很乏味,但这是Boost.MultiIndex的用途:)
对于您所说的非常具体的案例,Jack
提及的MultiIndex库上方有一个名为Boost.Bimap的包装器。