Re: Использование сложного класса в качестве ключа в std::map
От: aset  
Дата: 01.06.12 21:01
Оценка:
Здравствуйте, alexnik, Вы писали:

A>У меня есть некоторый класс большой класс в качестве ключа мапа. Насколько мне выгоднее использовать в качестве ключа указатель на структуру.

A>Насколько я понимаю по памяти я выиграю, по производительности — нет, по сложности написания проиграю. Скажите прав ли я? И как вы поступили бы в этом случае.

А что такое производительность в контексте вашей программы? Акцент на вставках/удалениях или частом доступе?
Очевидно, что указатель в качестве ключа будет работать до тех пор, пока сам ключ не скопируют в другую область памяти.

boost::shared_ptr в программе можно использовать? если да, то можно, например, сделать так (тривиальный вариант):


#include <boost/shared_ptr.hpp>

#include <iostream>
#include <map>

struct Large 
{
    Large(int _id):id(_id) {}
    int id;

    ... // Large data

};

typedef boost::shared_ptr<Large> LargePtr;

bool operator < (const LargePtr& rhs, const LargePtr& lhs)
{
    return rhs->id < lhs->id; // for example
}

...
    std::map<LargePtr, SomeValueType> l2v;
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.