std::map
использует компаратор, чтобы проверить, существует ли ключ или нет. Поэтому, когда вы используете std::tm
, вы должны предоставить компаратор в качестве третьего аргумента.
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class map
Таким образом, решение будет функтором (как вы уже догадались):
struct tm_comparer
{
bool operator () (const std::tm & t1, const std::tm & t2) const
{ //^^ note this
//compare t1 and t2, and return true/false
}
};
std::map<std::tm, std::string, tm_comparer> mapItem;
//^^^^^^^^^^ pass the comparer!
Или определить свободную функцию (operator <
) как:
bool operator < (const std::tm & t1, const std::tm & t2)
{ // ^ note this. Now its less than operator
//compare t1 and t2, and return true/false
};
std::map<std::tm, std::string> mapItem; //no need to pass any argument now!