Где разместить функцию сравнения для использования (например,) с std :: sort?

Если бы у меня был класс Cellнапример, который я хочу отсортировать согласно следующей функции (x а также y здесь быть int переменные-члены с аксессорами):

bool sortByCoordinates(const Cell& c1, const Cell& c2) {
return c1.getX() < c2.getX() || (c1.getX() == c2.getX() && c1.getY() < c2.getY());
}

Где именно это лучшее место для размещения этой функции, чтобы я мог использовать ее с такими функциями, как std::sort?

В примерах у них просто есть метод, плавающий в исходном файле выше, где это необходимо, но на практике я хочу, чтобы он был связан с Cell учебный класс. Я знаю, что могу переопределить operator< но могут быть другие методы сортировки, с помощью которых я хотел бы отсортировать Cellи я не большой поклонник переопределения операторов для ясности кода в любом случае.

На данный момент у меня это как static метод в моем Cell.h файл, чтобы я мог вызвать его при сортировке следующим образом:

std::sort(cells.begin(), cells.end(), Cell::sortByCoordinates);

Является ли это наилучшей практикой для нескольких (или даже единичных) пользовательских функций сортировки, и является ли файл заголовка подходящим для них местом? Если нет, то что?

0

Решение

Делать так, как вы описываете, разумно. И определение функции сравнения inline в самом заголовке хорошая идея, если вы заботитесь о производительности (а не определяете ее в файле .cpp).

Лично у меня другие предпочтения, чем у вас. Я бы объявил эту разумную функцию сравнения по умолчанию в области пространства имен (то есть прямо под классом), потому что, как написано, ей не нужен привилегированный доступ к членам класса. И я бы объявил это operator <, Я не думаю, что есть что-то, за что можно стыдиться с точки зрения того, чтобы сделать одну функцию «особенной», когда это кажется разумным упорядочением по умолчанию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]