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


|