Вы должны вынести сравнение как тип, как это делает нормальный std::map
. То есть есть служебный класс less_compare
:
template <typename T>
struct less_compare
{
bool operator()(const T& pLhs, const T& pRhs) const
{
return pLhs < pRhs;
}
};
А потом:
template <typename Key, typename Value, typename Compare = less_compare<Key> >
class map
{
// ...
private:
Compare mCompare;
};
И для сравнения двух значений выполните: if (mCompare(someThing, someOtherThing))
, что будет истинно, если someThing
"меньше" someOtherThing
. Обратите внимание, что этот факторинг также допускает пользовательские сравнения (именно поэтому в кавычках указано «меньше чем»). Это называется политическим дизайном.
И теперь вы можете специализировать только класс less_compare
для C-строк. (А также предоставить greater_compare
и род.)
Имейте в виду, что если это не для обучения, вы не должны реализовывать свою собственную карту. Также обратите внимание, что std::string
уже перегружен operator<
.