On May 6, 2:48 pm, dizzy <di...@[EMAIL PROTECTED]
> wrote:
> S S wrote:
> > Hi
>
> > I have a very basic question, but it's a good one. Below is the code
> > fragment.
>
> > struct ltstr
> > {
> > bool operator()(const char* s1, const char* s2) const
> > {
> > return strcmp(s1, s2) < 0;
> > }
> > };
>
> > int main()
> > {
> > const int N = 6;
> > const char* a[N] = {"isomer", "ephemeral", "prosaic",
> > "nugatory", "artichoke", "serif"};
> > set<const char*, ltstr> A(a, a + N);
> > if (A.find("ephemeral") != A.end())
> > cout << "Found";
> > else
> > cout << "Not found";
> > return 0;
> > }
>
> > Output will be -> "Found"
> > My question is , Why?
>
> > How it is able to compare a const char* with another const char* to
> > find that value?
>
> By using your provided predicate.
>
> > I did not specify any equality operator?
>
> It does not need to. And btw, it does not want to find equality, it
wants to
> find "equivalence", any good stdlib book will describe the difference
> between the two. Basically, you check for equality with op==/!= and you
> check for equivalence with an expression like iff (!(arg1 < arg2) &&
!(arg2
> < arg1)) then arg1 and arg2 are equivalent for your given order
predicate.
>
> > I just
> > mentioned strcmp(s1, s2) < 0
> > which means, when strcmp(s1, s2) == 0 (in case of match)
> > it will return false. So how set/map are able to find the const char*
> > value?
>
> See above.
>
> --
> Dizzy
Dizzy,
How does this strcmp(s1, s2) < 0 fitting in the equivalence theorem?
It will not return true in case they are equivalent.


|