我有这两个地图,每个地图存储10000多个条目:
std::map<std::string,ObjectA> mapA;
std::map<std::string,ObjectB> mapB;
我希望从两个映射中仅检索出键都存在的值。例如,如果键“10001”在mapA和mapB中都找到,则我需要来自两个映射的相应对象。类似于在SQL表上执行联接。最简单的方法是迭代较小的映射,然后在每次迭代中进行std::find(iter->first)以找到符合条件的键。但那也会非常昂贵。
相反,我考虑维护这样一个集合:
std::set<std::string> common;
1) 每次我往其中一个映射中插入数据时,都会检查它是否存在于另一个映射中。如果存在,则将该键添加到上述公共集合中。
2) 每次我从其中一个映射中删除一个条目时,如果在公共集合中存在该键,则将其从公共集合中删除。
公共集合始终维护两个映射中都存在的键。当我想要进行连接操作时,已经有了符合条件的键。是否有更快/更好的方法?