Моя функция search_intersection
получить набор <set<string> >& inter_section
,
Я хочу получить пересечение всех подмножеств в inter_section
,
Например, если:
inter_section = { { lion, cat } , {lion, bird}, {lion, cat, bird} }
Я хочу:
result = { lion }
На данный момент я сделал это
set<string> search_intersection(set <set<string> >& inter_section)
{
set <set<string> >::iterator iter_ss;
set <string> result;for (iter_ss = inter_section.begin(); iter_ss != inter_section.end(); ++iter_ss)
{
set_intersection(iter_ss.begin(),iter_ss.end(),
result.begin(),result.end(),
std::inserter(result.begin(),result.end()));
}
cout << endl;
return result;
}
Большое спасибо!
Давайте попробуем еще раз: (Нескомпилированный код)
set<string> search_intersection(const set <set<string> > &inter_section) {
set <string> result;
set <set<string> >::iterator iter = inter_section.begin ();
if ( iter != inter_section.end ()) {
result = *iter;
for ( ++iter; iter != inter_section.end (); ++iter ) {
set <string> temp;
// intersect *iter and result, put into temp
set_intersection(
iter->begin(), iter->end (),
result.begin(), result.end(),
std::inserter(temp,temp.end()));
result = temp;
}
}
return result;
}
Обратите внимание, что вызов set_intersection передает начало / конец набора, на который указывает итератор. Также есть как минимум два места, где const
следует применять к этому коду.
Вы не можете написать результаты set_intersection
в один из входов, либо. Отсюда временная переменная.
Других решений пока нет …