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)


Anmelden zum Antworten