使用std::set_intersection
有点小技巧:
map<int,vector<int>> id2courses;
map<int,vector <int>> i2allowed_courses;
set_intersection(id2courses.begin(), id2courses.end(),
i2allowed_courses.begin(), i2allowed_courses.end(),
null_output_iterator(),
compare_and_do_something_if_same_key);
来自null_output_iterator
问题Discarding the output of a function that need a output iterator。
compare_and_do_something_if_same_key
pair<const int, vector<int>>
将从每个地图中传递一个。如果键相等,您可以进行所需的处理。您还需要返回一个布尔值来表示元素的顺序:
bool compare_and_do_something_if_same_key(
pair<const int, vector<int>& a, pair<const int, vector<int>& b)
{
if(a.first == b.first) {
doProcessing(a, b);
}
return a.first < b.first;
}
警告 Emptor:文档说比较函数不能修改被比较的对象。我认为这意味着不得以会导致订购问题的方式进行修改。由于您没有按second
价值排序,所以pair
我认为这并不重要。
编辑可读性:
这可以包装成一个命名函数:
template<typename Map, typename KeyValueProcessor>
void process_values_for_matching_keys(
Map& map1, Map& map2, KeyValueProcessor& keyValueProcessor);
并用作:
process_pairs_for_matching_keys(id2courses, i2allowed_courses, doProcessing);