@Pawlowitsch

Не получается найти пересечения multiset, в чем проблема?

Мне нужно найти пересечения двух multiset, каждый из которых находится внутри vector.
Вот часть кода, где я это делал:
unordered_multiset <char> intersect; //множество для результата пересечения
unordered_multiset <char> first;
unordered_multiset <char> second;
for (int i = 0; i < Sentence.size(); i++) { //Sentence - это vector <unordered_multiset<char>>
	for (int j = 0; j < Dictionary.size(); j++) { //Dictionary  - это тоже vector <unordered_multiset<char>>
		first = Sentence[i];
		second = Dictionary[j];
		set_intersection(first.begin(), first.end(), second.begin(), second.end(), intersect.begin());


Программа не компилировалась и выдавала ошибку: C3892 _UDest: невозможно присваивать значения переменной, которая объявлена как константа.

Я заменил в
set_intersection(first.begin(), first.end(), second.begin(), second.end(), intersect.begin());

intersect.begin() на inserter(intersect, intersect.begin())

Программа компилируется, но останавливается на этой же сточке и пишет: Недопустимый параметр был передан функции, для которой недопустимые параметры вызывают неустранимую ошибку.

Как я понял, пятым параметром в set_intersection должен быть OutPutIterator, но видимо .begin() возвращает InPutIterator.

В итоге, облазив все сайты и форумы я так и не понял в чем ошибка.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Проблема в том, что итераторы unordered_set - имеют тип ForwardIterator. Варианты set_intersection, которые ждут вот такой вот итератор для результата, еще хотят и ExecutionPolicy.

Но даже если вы поменяете тип у intersect, чтобы туда можно было вставлять ответ, ваш код не сработает, потому что set_intersection ждет упорядоченные интервалы. Вас unordered в названии контейнеров не смущает?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы