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