• 3 odgovora
  • 5.550 pregleda
Predikat za mapu 13.09.2002. u 12:32 · pre 293 meseci #1
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...


Potpis
int main[] = { 0xc3 };
Re: Predikat za mapu 15.09.2002. u 23:47 · pre 293 meseci #2
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);
}
Potpis
IOCC
Re: Predikat za mapu 16.09.2002. u 18:13 · pre 293 meseci #3
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));

Re: Predikat za mapu 17.09.2002. u 16:57 · pre 293 meseci #4
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


Potpis
int main[] = { 0xc3 };
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme