0

How to make map with two kwys. I am using struct.

struct Key
{
    char * gi;
    char * offset;
    Key(const char * _gi, const char * _offset)
    {
        gi = new char [strlen(_gi) + 1];
        strcpy(gi, _gi);
        offset = new char [strlen(_offset) + 1];
        strcpy(offset, _offset);
    }
    ~Key()
    {
        if (gi != NULL)
        {
            delete [] gi;
            gi = NULL;
        }
        if (offset != NULL)
        {
            delete [] offset;
            offset = NULL;
        }
    }
};
struct Value
{
    char * orient;
 char * allele ;
    Value(const char * _orient, const char * _allele)
    {
        orient = new char [strlen(_orient) + 1];
        strcpy(orient, _orient);
        allele = new char [strlen(_allele) + 1];
        strcpy(allele, _allele);
    }
    ~Value()
    {
        if (orient != NULL)
        {
            delete [] orient;
            orient = NULL;
        }
        if (allele != NULL)
        {
            delete [] allele;
            allele = NULL;
        }
    }
};

struct ltstr
{
    bool operator()(const Key* _lhs, const Key* _rhs) const
    {
        return (strcmp(_lhs->gi,_rhs->gi) > 0 && strcmp(_lhs->offset,_rhs->offset) );
  }
};
Key key ("34", "abcd");
Value value ("sdf", "asdf");
n.insert(dbmap::value_type(&key,&value));

When i try to retrieve the keys and values using iterator to map, i am not getting anything.
Can you tell me where i am wrong?
I will be really thankful if you can help me.

Regards
Man

Edited by mike_2000_17: Fixed formatting

3
Contributors
4
Replies
5
Views
7 Years
Discussion Span
Last Post by BradenMurphy
0

1. Use code tag:
[code=c++] source

[/code]
2. As usually, such classes as Key and Value need user-defined copy constructors and overloaded assignment operators. Default ctor and operator= (member by member) are wrong.
3. What's your class dbmap definition? If it's std::map<Key*,Value*> then you can't get sensible map for Key* type key (operator< for pointers used). Besides that, std::map has a single key by definition (see a strange title of your post == I want hot ice). Probably you must define Key::operator< and define std::map<Key,Value> map.

0

1. Use code tag:
[code=c++] source

[/code]
2. As usually, such classes as Key and Value need user-defined copy constructors and overloaded assignment operators. Default ctor and operator= (member by member) are wrong.
3. What's your class dbmap definition? If it's std::map<Key*,Value*> then you can't get sensible map for Key* type key (operator< for pointers used). Besides that, std::map has a single key by definition (see a strange title of your post == I want hot ice). Probably you must define Key::operator< and define std::map<Key,Value> map.

My map is map<Key*,value*,ltstr> . Since i am using comparator so it should work.
Still not able to understand the pblm.

0

It's impossible to understand the problem in your snippet. At first present the code fragment with the problem...
Apropos, it's not "a map with two keys". It's a compound key, that's all...

0

I understand a map with 2 keys being a 2d map array?
map<Key, Map<Key, Value> > So i suppose you can do that if you want a value that uses two keys to make it unique?

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.