Как использовать set_intersection со станд.:: набор в VC ++?

Я пытаюсь скомпилировать проект VC6 с VC10... Я получаю ошибку C2678 с set_intersection: Я записал некоторый пример для понимания. Кто-либо может объяснить, как скомпилировать это отрывки?

#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <string>

int main( )
{
    using namespace std;

    typedef set<string> MyType;

    MyType in1, in2, out;
    MyType::iterator out_iter(out.begin()); 

    set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
}

Вывод:

c:\program files\microsoft visual\studio 10.0\vc\include\algorithm (4494): ошибка C2678: '=' двоичный файл: никакой оператор не определил, который берет левый операнд типа 'станд. константы:: basic_string <_Elem, _Traits, _Ax>' (или нет никакого приемлемого преобразования),

Если я использую a std::vector вместо std::set за компиляцией следуют. приемлемый)

5
задан Kate Gregory 30 June 2010 в 18:06
поделиться

1 ответ

попытка set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), inserter(out, out.begin()) );

Это происходит потому, что set_intersection хочет записать в выходной итератор, что приводит к увеличению размера выходного контейнера. Однако это невозможно сделать с помощью одного лишь итератора (его можно использовать для перезаписи существующих элементов, но не для увеличения размера)

Редактирование: исправил опечатку. Используйте инсертер для добавления к множеству. Обратный_инсертер работает только для векторов и тому подобного.

Редактирование 2: исправлена еще одна опечатка. STL inserter требует второй аргумент, который является итератором подсказки к вероятной позиции вставки. Спасибо chepseskaf.

6
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

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