equal_to<string>() -> no match for operator==
-
Hi
Ich wollt den Algorithmus equal_to mit strings verwenden. Doch der Compiler bringt massig Fehlermeldungen.
Code.struct Fraction { std::string m_name, int m_value }; typedef vector<Fraction> FractionTableT; // Von jedem Eintrag sollen alle mit gleichem Namen gefunden werden. for( FractionTableT::iterator it = fractions.begin(); it != fractions.end(); it++ ) { while( true ) { FractionTableT::iterator findit = find( fractions.begin(), fractions.end(), bind2nd( // Hier meldet er den Fehler std::equal_to<std::string>(), it->m_name ) ); if( findit == fractions.end() ) { break; } // tu was damit } }Fehler
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:212: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction> >]() == __val’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:216: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction> >]() == __val’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:220: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction> >]() == __val’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:228: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction> >]() == __val’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:232: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction> >]() == __val’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:236: error: no match for ‘operator==’ in ‘__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Fraction*, _Container = std::vector<Fraction, std::allocator<Fraction>Kann mir jemand aus dem Gewühl helfen?
Danke
-
find() erwartet als letzten Parameter einen Wert, mit dem verglichen werden soll, die Variante, die einen Funktor erwartet, nennt sich find_if().
(und equal_to<> dürfte auch Probleme damit bekommen, wenn du ihm verschiedene Datentypen übergeben willst - da brauchst du schon eine eigene Vergleichsfunktion)