set::find with custom equality operator==
Hi all, I have the following code.
// db_operators.h
#ifndef INCLUDED_DB_OPERATORS
#define INCLUDED_DB_OPERATORS
#include <cstring>
struct ecodb2{
unsigned long long id;
char code[21];
};
inline bool operator==(const ecodb2& lhs,
const ecodb2& rhs)
{
std::cout << "Some text" << std::endl;
return ((lhs.id == rhs.id) || !std::strcmp(lhs.code, rhs.code));
}
struct Compare
{
bool operator()(const ecodb2& lhs,
const ecodb2& rhs) const
{
bool retval = false;
if(lhs.id < rhs.id)
retval = true;
else if(lhs.id == rhs.id)
retval = std::strcmp(lhs.code, rhs.code);
return retval;
}
};
#endif
// main.cpp
#include <iostream>
#include <cstring>
#include <set>
#include <db_operators.h>
int main()
{
std::set<ecodb2, Compare> industry_codes;
ecodb2 val;
val.id = 1;
std::strncpy(val.code, "GOV", sizeof(val.code));
industry_codes.insert(val);
std::strncpy(val.code, "ABC", sizeof(val.code));
std::set<ecodb2>::iterator it = industry_codes.find(val);
if(it != industry_codes.end())
std::cout << "Found in set" << std::endl;
else
std::cout << "Not found in set" << std::endl;
}
While running this code, I expect to see Found in set (as either id or
code match meaning a perfect match) and also "Some text" being
printed, becasue set::find should call my custom operator==() function
to find a match but the output I get is "Not found in set" and also
"Some text" is not getting printed.
Please help.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]