[gelöst] Inhalt einer deque mit eigenem Typ kann nicht in set kopiert werden



  • Tach!

    Ich möchte den Inhalt einer deque in ein set übertragen. Das klappt versuchsweise mit einer deque<int>, aber nicht mit einem selbstgebauten Typ. Was mache ich falsch?

    struct T_sum {
    	int r,g,b;
    };
    struct T_average {
    	int r,g,b;
    	int rgb;
    };
    struct T_maximum {
    	int r,g,b;
    	int rgb;
    };
    struct T_minimum {
    	int r,g,b;
    	int rgb;
    };
    struct T_ImageAnalysis {
    	T_ImageAnalysis() {
    		memset(&sum,0,sizeof(sum));
    		memset(&average,0,sizeof(average));
    		memset(&maximum,0,sizeof(maximum));
    		minimum.r=minimum.g=minimum.b=minimum.rgb=255;
    		outshining=0;
    	}
    	T_sum sum;
    	T_average average;
    	T_maximum maximum;
    	T_minimum minimum;
    	int outshining;
    };
    
    int main() {
    	try {
    
    		//geht wunderbar:
    		std::deque<int> deqInt;
    		deqInt.push_back(1);
    		deqInt.push_back(2);
    		std::set<int> setInt;
    		std::copy(deqInt.begin(),deqInt.end(),std::inserter(setInt,setInt.end()));
    		std::set<int>::iterator itIntPeak=--setInt.end();
    
    		//geht so gar nicht:
    		std::deque<T_ImageAnalysis> deqAn;
    		T_ImageAnalysis ia1,ia2;
    		deqAn.push_back(ia1);
    		deqAn.push_back(ia2);
    		std::set<T_ImageAnalysis> setAn;
    		std::copy(deqAn.begin(),deqAn.end(),std::inserter(setAn,setAn.end()));
    		std::set<T_ImageAnalysis>::iterator itAnPeak=--setAn.end();
    
      //...
    }
    

    Fehlermeldungen:

    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::deque<_Ty,_Alloc> &,const std::deque<_Ty,_Alloc> &)": template-Argument für "const std::deque<_Ty,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\deque(1349): Siehe Deklaration von 'std::operator <'
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\functional(142): Bei der Kompilierung der  Klassen-template der bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const-Memberfunktion
    1>        with
    1>        [
    1>            _Ty=T_ImageAnalysis
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\set(48): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::less<_Ty>".
    1>        with
    1>        [
    1>            _Ty=T_ImageAnalysis
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xtree(22): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tset_traits<_Kty,_Pr,_Alloc,_Mfl>".
    1>        with
    1>        [
    1>            _Kty=T_ImageAnalysis,
    1>            _Pr=std::less<T_ImageAnalysis>,
    1>            _Alloc=std::allocator<T_ImageAnalysis>,
    1>            _Mfl=false
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xtree(63): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_nod<_Traits>".
    1>        with
    1>        [
    1>            _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xtree(89): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_ptr<_Traits>".
    1>        with
    1>        [
    1>            _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xtree(107): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree_val<_Traits>".
    1>        with
    1>        [
    1>            _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
    1>        ]
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\set(57): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Tree<_Traits>".
    1>        with
    1>        [
    1>            _Traits=std::_Tset_traits<T_ImageAnalysis,std::less<T_ImageAnalysis>,std::allocator<T_ImageAnalysis>,false>
    1>        ]
    1>        c:\develop\testcon08\main.cpp(77): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::set<_Kty>".
    1>        with
    1>        [
    1>            _Kty=T_ImageAnalysis
    1>        ]
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)": template-Argument für "const std::vector<_Ty,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\vector(1322): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)": template-Argument für "const std::_Tree<_Traits> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xtree(1466): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\string(150): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)": template-Argument für "const _Elem *" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\string(140): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\string(130): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)": template-Argument für "const std::reverse_iterator<_RanIt> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xutility(2262): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)": template-Argument für "const std::_Revranit<_RanIt,_Base> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\xutility(2072): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2784: "bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)": template-Argument für "const std::pair<_Ty1,_Ty2> &" konnte nicht von "const T_ImageAnalysis" hergeleitet werden.
    1>        c:\devenv\microsoft visual studio 9.0\vc\include\utility(99): Siehe Deklaration von 'std::operator <'
    1>c:\devenv\microsoft visual studio 9.0\vc\include\functional(143) : error C2676: Binärer Operator '<': 'const T_ImageAnalysis' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    

    EDIT: Schon gut, hab's gerafft. Der kann das struct logischerweise nicht vergleichen (set) und ich muss 'nen Funktor definieren... 💡


Anmelden zum Antworten