Сортировка вектора объектов с использованием функции сравнения - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь перейти по ссылке, где кто-то пытается упростить ссылку на сортировку C ++ http://www.cplusplus.com/forum/beginner/4817/, однако я не могу получить операторную функцию bool для компиляции так, как он ее имеет.

У меня есть вектор объектов событий.Я хочу отсортировать вектор по времени начала события.Если бы начальные времена были числами, это было бы проще, но они были строками, поэтому мне пришлось написать функции для преобразования в uint64_t, весь мой код до такой попытки работает как надо.Вот код, который я пытаюсь заставить работать:

Функция bool:

bool EWriter:: operator () ( Event &a,  Event &b){
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 
}

Этот код компилируется, но я не могу понять, как дать ему имя, и поэтому яне может ссылаться на это в сортировке.Кроме того, я бы предпочел перегрузить оператор <, но я получаю сообщение об ошибке, ему нужен третий аргумент.

Вот мой вид:

sort(events->begin(), events->end(), someFunctionName);??

Немного не связано то, что я знаю, что яя должен использовать const в аргументах, но я не могу вызывать функции класса Event, если я их реализовал.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Перегрузив operator(), вы сделали EWriter a функтор .

Просто передайте ему экземпляр EWriter.

Если EWriter имеет конструктор по умолчанию, вы можете использовать:

sort(events->begin(), events->end(), EWriter());

Или передайте ему EWriter, который уже существует.

0 голосов
/ 21 декабря 2011

Вы перегружаете оператор скобок:

bool EWriter:: operator () ( Event &a,  Event &b){
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 

}

Попробуйте:

bool EWriter:: operator <( Event &a,  Event &b){
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...