Установить пересечение в петле

Моя функция 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;
}

Большое спасибо!

0

Решение

Давайте попробуем еще раз: (Нескомпилированный код)

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 в один из входов, либо. Отсюда временная переменная.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]