在 Metro Style 应用程序中,有时我们Platform::Collections::Vector
用来保存 ListView 中使用的元素。
如何排序Platform::Collections::Vector
?
我知道 std 中有很多可以排序的结构,但我想知道Platform::Collections::Vector
除了编写自己的排序函数之外是否还有其他方法。
在 Metro Style 应用程序中,有时我们Platform::Collections::Vector
用来保存 ListView 中使用的元素。
如何排序Platform::Collections::Vector
?
我知道 std 中有很多可以排序的结构,但我想知道Platform::Collections::Vector
除了编写自己的排序函数之外是否还有其他方法。
实际上像下面这样的东西也应该起作用:
auto vec = ref new Platform::Collections::Vector<T^>();
std::sort(begin(vec), end(vec));
我没有找到任何合适的答案,所以我使用了这个解决方法。
这是一个简单quicksort
的Platform::Collections::Vector
void swap (Platform::Collections::Vector<T^>^ vec, int pos1, int pos2)
{
T^ tmp = vec->GetAt(pos1);
vec->SetAt(pos1, vec->GetAt(pos2));
vec->SetAt(pos2,tmp);
}
int compare (T^ c1, T^ c2)
{
int c = wcscmp (c1->Title->Data(),c2->Title->Data());
return -c;
}
int PartitionVec (int left, int right,
Platform::Collections::Vector<T^>^ vec)
{
int i,j;
i = left;
for (int j = left + 1; j <= right; ++j)
{
if (compare (vec->GetAt(j),vec->GetAt(left)) > 0)
{
++i;
swap (vec,i,j);
}
}
swap (vec,left,i);
return i;
}
void QuickSortVec (Platform::Collections::Vector<T^>^ vec,
int start, int end)
{
if (end > start)
{
int pivot_point;
pivot_point = PartitionVec (start, end, vec);
QuickSortVec (vec,start,pivot_point - 1);
QuickSortVec (vec, pivot_point + 1, end);
}
}