[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

How to write a multi value compare function for std::map

Herby

11/10/2008 5:22:00 PM

Hi,

My key for the map is a class with two strings, group and name as
follows:

class ConfigKey{
public:

ConfigKey( String group, String key );

String mGroup;
String mName;
};


Now I want to do a lookup on both values matching.

So I have defined my own compare functions as follows:

struct cmp_config_key
{
bool operator()(ConfigKey const *lhs, ConfigKey const *rhs)
{
if( lhs->mGroup < rhs->mGroup ){
if( lhs->mKey < rhs->mKey )
return true;
}

return false;

}
};

Above is not working correctly as it returns some other key when i
call find. Im not too clear on this weak ordering business and it
gets even more confusing with multiple values acting as the key.

Naturally and intuitively i just want to write

if( lhs->mGroup == rhs->mGroup ){
if( lhs->mKey == rhs->mKey )
return true;
}

Please could someone correct my function???


2 Answers

Obnoxious User

11/10/2008 5:58:00 PM

0

On Mon, 10 Nov 2008 09:22:21 -0800, Herby wrote:

> Hi,
>
> My key for the map is a class with two strings, group and name as
> follows:
>
> class ConfigKey{
> public:
>
> ConfigKey( String group, String key );
>
> String mGroup;
> String mName;
> };
>
>
> Now I want to do a lookup on both values matching.
>
> So I have defined my own compare functions as follows:
>
> struct cmp_config_key
> {
> bool operator()(ConfigKey const *lhs, ConfigKey const *rhs) {
> if( lhs->mGroup < rhs->mGroup ){
> if( lhs->mKey < rhs->mKey )
> return true;
> }
>
> return false;
>
> }
> };
>
> Above is not working correctly as it returns some other key when i call
> find. Im not too clear on this weak ordering business and it gets even
> more confusing with multiple values acting as the key.
>
> Naturally and intuitively i just want to write
>
> if( lhs->mGroup == rhs->mGroup ){
> if( lhs->mKey == rhs->mKey )
> return true;
> }
>
> Please could someone correct my function???

struct cmp_config_key
{
bool operator()(ConfigKey const *lhs, ConfigKey const *rhs) const
{
if(lhs->mGroup < rhs->mGroup) {
return true;
}
if(lhs->mGroup == rhs->mGroup) {
if(lhs->mKey < rhs->mKey) {
return true;
}
}
return false;
}
};

--
OU
Remember 18th of June 2008, Democracy died that afternoon.
http://frapedia.se/wiki/Information_...

Herby

11/10/2008 6:07:00 PM

0

On Nov 10, 5:58 pm, Obnoxious User <O...@127.0.0.1> wrote:
> On Mon, 10 Nov 2008 09:22:21 -0800, Herby wrote:
> > Hi,
>
> > My key for the map is a class with two strings, group and name as
> > follows:
>
> > class ConfigKey{
> > public:
>
> > ConfigKey( String group, String key );
>
> > String mGroup;
> > String mName;
> > };
>
> > Now I want to do a lookup on both values matching.
>
> > So I have defined my own compare functions as follows:
>
> > struct cmp_config_key
> > {
> > bool operator()(ConfigKey const *lhs, ConfigKey const *rhs) {
> > if( lhs->mGroup < rhs->mGroup ){
> > if( lhs->mKey < rhs->mKey )
> > return true;
> > }
>
> > return false;
>
> > }
> > };
>
> > Above is not working correctly as it returns some other key when i call
> > find. Im not too clear on this weak ordering business and it gets even
> > more confusing with multiple values acting as the key.
>
> > Naturally and intuitively i just want to write
>
> > if( lhs->mGroup == rhs->mGroup ){
> > if( lhs->mKey == rhs->mKey )
> > return true;
> > }
>
> > Please could someone correct my function???
>
> struct cmp_config_key
> {
> bool operator()(ConfigKey const *lhs, ConfigKey const *rhs) const
> {
> if(lhs->mGroup < rhs->mGroup) {
> return true;
> }
> if(lhs->mGroup == rhs->mGroup) {
> if(lhs->mKey < rhs->mKey) {
> return true;
> }
> }
> return false;
> }
>
> };
>
> --
> OU
> Remember 18th of June 2008, Democracy died that afternoon.http://frapedia.se/wiki/Information_...

Thanks mate. Excellent works!!!!!