Является ли сортировка CListCtrl (SortItems) в MFC стабильной? - PullRequest
0 голосов
/ 23 июня 2011

То, что написано в заголовке - если я предоставлю значения -1, 0 и 1 для обратного вызова сортировки для CListCtrl (сортировка по заголовку / столбцу), будет сортировка стабильная сортировка ?

1 Ответ

1 голос
/ 23 июня 2011

Первые два параметра обратного вызова предназначены для сравнения элементов на этой итерации, третий параметр предназначен для использования в порядке, столбце и других критериях. Обратный вызов выполняет сравнение и возвращает целочисленное значение, представляющее направление перемещения элемента, если оно есть.

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

С другой стороны, вероятно, более эффективно поддерживать контейнер данных отдельно от элемента управления, например std::vector, и выполнять алгоритм стабильной сортировки для этого оптимизированного контейнера, например std::sort, а затем использовать стиль LVS_OWNERDATA для CListCtrl чтобы извлечь из контейнера данных с помощью обратного вызова LVN_GETDISPINFO.

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