1

在 Metro Style 应用程序中,有时我们Platform::Collections::Vector用来保存 ListView 中使用的元素。

如何排序Platform::Collections::Vector

我知道 std 中有很多可以排序的结构,但我想知道Platform::Collections::Vector除了编写自己的排序函数之外是否还有其他方法。

4

2 回答 2

4

实际上像下面这样的东西也应该起作用:

auto vec = ref new Platform::Collections::Vector<T^>();
std::sort(begin(vec), end(vec));
于 2013-08-22T20:48:50.043 回答
0

我没有找到任何合适的答案,所以我使用了这个解决方法。

这是一个简单quicksortPlatform::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);
    } 
}
于 2013-08-21T16:35:36.570 回答