Здравствуйте, 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;
...