我有一个简单的要求,我需要从另一个向量中的字符串主列表中找到一个向量中字符串的出现。一开始我可以很容易地做到这一点:
vector<string> custom_list;
set<string> master_list;
vector<string> target_list;
std::sort(custom_list.begin(), custom_list.end());
std::set_intersection(custom_list.begin(), custom_list.end(), master_list.begin(),
master_list.end(), back_inserter(target_list));
这工作得很好。但后来发现,master_list 中的每个字符串都与一个标识符相关联。我希望我可以使用 std::set_intersection 这样一种方式,即我可以使用 target_list 中的相交元素作为索引来获取它们的标识符。实际上,我认为我会将 master_list 更改为地图,如下所示:
map<string, SomeCustomId> master_list;
并能够执行以下操作:
auto I_want_this_id = master_list[target_list[0]);
但是现在我不确定是否可以使用 set_intersection 来比较两个完全不同的容器(custom_list,一个向量和 master_list,一个地图),即使我编写了自己的比较函数。就像是:
struct mycomparer {
bool operator()(string const& lhs, pair<string, SomeCustomId> const& rhs) {
return lhs == rhs.first;
}
};
这不太奏效(我遇到了各种编译器错误),而且直观地说,这对我来说有些不对劲。
有没有更好的方法来完成我想做的事情?