Обратите внимание, что std::list
сортирует элемент в соответствии с operator<
, определенным для этого элемента. Вам необходимо изменить функцию compare
, чтобы использовать глобальный operator<
, определенный для Node
объектов:
bool operator<(Node const& first, Node const& second) {
unsigned int ii =0;
while (ii < length)
{
if (first.Value[ii] < second.Value[ii])
{
return true;
} else if (first.Value[ii] > second.Value[ii])
{
return false;
}
++ii;
}
return false;
}
Предлагаемое улучшение будет:
bool operator<(Node const& first, Node const& second) {
for (size_t ii =0; first.Value[ii] == second.Value[ii]; ++ii) ; // note ;
return (first.Value[ii] < second.Value[ii]);
}
Если char *Value
действительно представляет строку в стиле C и вам нужна лексикографическая сортировка, возможны дальнейшие улучшения:
bool operator<(Node const& first, Node const& second) {
return (strcmp(first.Value, second.Value) < 0);
}
и если они действительно являются строками, я предлагаю вам использовать std::string
, и вы можете написать:
bool operator<(Node const& first, Node const& second) {
return first.Value < second.Value;
}