Вся таблица хранится в std::deque<record *>
, и мне нужно разрешить пользователю сортировать таблицу по любому столбцу. Таблица представляется пользователю в формате списка.
Каждая запись состоит из нескольких строк (структура строк). Однако поля имеют разные типы, то есть время (ЧЧ: ММ: СС), число с плавающей запятой и строки, даже если они все хранятся как строки.
Пользователь может сортировать по любому из этих столбцов. Когда пользователь нажимает на столбец, я сохраняю каждую запись в мультикарте, чтобы таблица отображалась в отсортированном формате для пользователя.
Однако, поскольку столбцы имеют разные типы, как мне написать один метод сравнения, который эффективно обрабатывает все это?
Я подумал о следующих путях
- Используйте разные карты для каждого типа и запишите один класс функций сравнения для каждой из карт.
- Используйте одну карту с классом сравнения, который обрабатывает все три различных типа. Но для каждой вставки класс сравнения должен решить тип и вставить соответственно.
Есть ли лучший способ, чем эти два?
Пример:
struct ltDataCompare
{
bool operator()( const CString& csData1, const CString& csData2) const
{
if ( isTimeFormat(csData1) && isTimeFormat(csData1) )
{
// Do time relevant comparision
}
else if ( isNumberFormat( csTime1 ) && isNumberFormat(csTime2) )
{
double dPrice1 = atof((LPCTSTR)csTime1);
double dPrice2 = atof((LPCTSTR)csTime2);
return ( dPrice1 < dPrice2);
}
return ( csTime1 < csTime2 );
}
};
std::multimap<CString,list_record_t*,ltDataCompare> _mapAllRecords; // Used only for sorting