我有一个简单的需求,需要在另一个向量中的主字符串列表中查找一个向量中的字符串出现次数。一开始我可以轻松地使用以下代码实现:
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,即可以使用目标列表中的交集元素作为索引来获取它们的标识符。实际上,我想把 master_list 更改为一个 map,如下所示:
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;
}
};
这种方法并不能很好地实现目标(我收到了各种编译器错误),直觉上也感觉有些不对。
有没有更好的方法来实现我想做的事情呢?