Добрый день
Не первый раз возникает ситуация когда данные должны быть упорядочены по ключу (в данном случае "время"), но прямолинейное их хранение в мапе не годится - нужно обращение по индексу, для UI и не только. К тому же данные еще и полиморфны. Поэтому я выбрал такую организацию (псевдокод)
C++ (Qt)
struct Key {
double GetTime( void ) const { return m_time; }
void SetTime( double time );
virtual QVariant GetData( void ) const = 0;
virtual void SetData( const QVariant & v ) = 0;
private:
double m_time;
...
};
struct Container {
void SortByTime( void );
...
private:
QVector<Key *> m_keys;
};
Да, но теперь, без иапы, нужно сортировать контейнер самому - а в какой момент это делать? Простейший вариант - пусть об этом заботится вызывающий, напр после вызова SetTime (изменил время ключа) вызвал SortByTime. Это однако никак не контролируется и возможностей насвистеть у вызывающего предостаточно. А несортированный контейнер начнет молотить полную фигню, напр
C++ (Qt)
double Container::GetMinTime( void ) const
{
return m_keys.size() ? m_keys[0]->GetTime() : m_defaultTime; // предполагается что m_keys упорядочены
}
Стоит ли упереться рогом и сделать Container::SortByTime приватным методом? Другие решения?
Спасибо