[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 nichtEDIT: Schon gut, hab's gerafft. Der kann das struct logischerweise nicht vergleichen (set) und ich muss 'nen Funktor definieren...
