5 Stimmen

Wie verwendet man set_intersection mit std::set in VC++?

Ich versuche, ein VC6-Projekt mit VC10 zu kompilieren... Ich erhalte einen Fehler C2678 mit set_intersection: Ich habe ein Beispiel geschrieben, um es zu verstehen. Kann jemand erklären, wie man diese Schnipsel kompiliert?

#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);
}

Die Ausgabe :

c: \program Dateien \microsoft visuell \studio 10.0 \vc\include\algorithm (4494): Fehler C2678: '=' binär : kein Operator definiert, der einen linken Operanden vom Typ 'const std::basic_string<_Elem,_Traits,_Ax>' annimmt (oder es gibt keine akzeptable Umwandlung)

Wenn ich eine std::vector anstelle von std::set die Zusammenstellung ist gelungen. akzeptabel)

7voto

rwong Punkte 5926

Versuchen Sie set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), **inserter(out, out.begin())** );

Das liegt daran, dass set_intersection in den Ausgabe-Iterator schreiben will, wodurch der Ausgabe-Container größer wird. Mit einem Iterator allein wäre dies jedoch nicht möglich (er könnte dazu verwendet werden, vorhandene Elemente zu überschreiben, ohne dass er an Größe zunimmt)

Edit: Tippfehler korrigiert. Verwenden Sie inserter für das Hinzufügen zu einer Menge. Ein back_inserter funktioniert nur für Vektoren und so.

Edit 2: einen weiteren Tippfehler korrigiert. STL inserter erfordert ein zweites Argument, das ein Hinweis-Iterator auf die wahrscheinliche Einfügeposition ist. Danke chepseskaf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X