[ Preeky @ 13.09.2002. 12:32 ] @
Imam jedan problem prilikom prosledjivanja predikat funkcije mapi.

Kreiram mapu na sledeci nacin:

map<string,int> m1(predikat_f);

gde je predikat_f funkcija koja treba da drzi mapu sortitanu prema vrednosti(int).

Ali Visual c++ 6 izbacuju error kad deklarishem mapu:
C:\Windows\Desktop\Preeky\level.cpp(276) : error C2664: '__thiscall
Context does not allow for disambiguation of overloaded function


Evo je funkcija:

bool predikat_f(const pair<string,int>& p1 , const pair<string,int>& p2)
{
return (p1.second) < (p2.second);
}


Zna li neko u cemu je problem?

Pozdrav...


[ Dragi Tata @ 15.09.2002. 23:47 ] @
Uradi nešto ovako:

Code:

#include <string>
#include <map>

using namespace std;

bool predikat_f(string& p1 , string& p2)
{
return (p1 < p2);
}


int main (void)
{
    typedef map<string, int, bool(*)(string&, string&)> CustomMap;
    CustomMap m1((const CustomMap::key_compare) predikat_f);
}
[ sspasic @ 16.09.2002. 18:13 ] @
Evo jos par varijacija na temu:
Code:

std::map<std::string, int, std::less<std::string> > mapa;

ili
Code:

struct predikat_fn {
    bool operator()(const std::string& p1 , const std::string& p2)
    {
        return p1 < p2;
    }
};

std::map<std::string, int, predikat_fn> mapa;

ili
Code:

bool predikat_f(const std::string& p1 , const std::string& p2)
{
    return p1 < p2;
}

std::map<std::string, int, bool (*)(const std::string &, const std::string &)> mapa(predikat_f);


i malo preterivanja,
Code:

std::map<std::string, int, std::pointer_to_binary_function<const std::string &, const std::string &, bool> > mapa(std::ptr_fun(predikat_f));

[ Preeky @ 17.09.2002. 16:57 ] @
hvala tati i spasicu na odgovorima ali nije to ono sto mi je trebalo.

Znam da mapa automatski sortira parove po kljucu kad se u nju ubace
medjutim bilo mi je potrebano u mom slucaju da ih sortira po value-u
a ne po kljucu (posto je dafault funkcija <kljuc> less )


U svakom slucaju problem sam resio na drugi nacin