Windows 8 平台::集合::向量排序

Windows 8 平台::集合::向量排序,windows-8,microsoft-metro,c++-cx,Windows 8,Microsoft Metro,C++ Cx,在Metro风格的应用程序中,有时我们使用Platform::Collections::Vector来保存ListView中使用的元素 如何对平台::集合::向量进行排序 我知道std中有很多可以排序的结构,但我想知道除了编写自己的排序函数之外,是否还有其他方法可以用于Platform::Collections::Vector。我没有找到任何合适的答案,所以我使用了这个解决方法 这是一个简单的快速排序平台::集合::向量 void swap (Platform::Collections::Vec

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

如何对平台::集合::向量进行排序


我知道std中有很多可以排序的结构,但我想知道除了编写自己的排序函数之外,是否还有其他方法可以用于
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);
    } 
}
void交换(平台::集合::向量^vec,int pos1,int pos2)
{
T^tmp=vec->GetAt(位置1);
vec->SetAt(位置1,vec->GetAt(位置2));
vec->SetAt(位置2,tmp);
}
整数比较(T^c1,T^c2)
{
INTC=wcscmp(c1->Title->Data(),c2->Title->Data());
返回-c;
}
int PartitionVec(int left,int right,
平台::集合::向量^vec)
{
int i,j;
i=左;
对于(int j=left+1;j GetAt(j),vec->GetAt(left))>0)
{
++一,;
互换(向量向量,i,j);
}
}
交换(vec,左,i);
返回i;
}
void QuickSortVec(平台::集合::向量^vec,
整数开始,整数结束)
{
如果(结束>开始)
{
int-pivot_点;
枢轴点=分段向量(开始、结束、向量);
QuickSortVec(vec、start、pivot_point-1);
QuickSortVec(vec,轴点+1,结束);
} 
}

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

这是一个简单的
快速排序
平台::集合::向量

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);
    } 
}
void交换(平台::集合::向量^vec,int pos1,int pos2)
{
T^tmp=vec->GetAt(位置1);
vec->SetAt(位置1,vec->GetAt(位置2));
vec->SetAt(位置2,tmp);
}
整数比较(T^c1,T^c2)
{
INTC=wcscmp(c1->Title->Data(),c2->Title->Data());
返回-c;
}
int PartitionVec(int left,int right,
平台::集合::向量^vec)
{
int i,j;
i=左;
对于(int j=left+1;j GetAt(j),vec->GetAt(left))>0)
{
++一,;
互换(向量向量,i,j);
}
}
交换(vec,左,i);
返回i;
}
void QuickSortVec(平台::集合::向量^vec,
整数开始,整数结束)
{
如果(结束>开始)
{
int-pivot_点;
枢轴点=分段向量(开始、结束、向量);
QuickSortVec(vec、start、pivot_point-1);
QuickSortVec(vec,轴点+1,结束);
} 
}

实际上,类似于以下内容的操作也应该起作用:

auto vec = ref new Platform::Collections::Vector<T^>();
std::sort(begin(vec), end(vec));
auto-vec=ref新平台::集合::向量();
排序(开始(vec),结束(vec));

实际上,类似于以下内容的操作也应该起作用:

auto vec = ref new Platform::Collections::Vector<T^>();
std::sort(begin(vec), end(vec));
auto-vec=ref新平台::集合::向量();
排序(开始(vec),结束(vec));

您可以将
std
CX
类型一起使用吗?您可以在CX容器上使用std算法编译器不允许在这个设计和实现的vecI中使用begin和end,我可以确认Raman是正确的。在包含WFC::Ivector vector或pc::vector ^之后调用不合格的非成员开始()/Enter()后,将返回一个PC::Vector迭代程序,一个普通的C++类,它是一个随机访问的STL迭代器。它可以与std::sort()等STL算法一起使用。请注意,std::sort()希望将元素与op@ppaulojr我刚刚被VisualStudio2015 RC的这个问题绊倒了。我的问题是我使用的是std::begin,但这些集合的非成员begin函数位于WFC命名空间中。删除上面答案中的std::like修复了我的问题,因为我有一个用于WFC命名空间的using namespace语句。也许这就是你遇到的问题。你能将
std
CX
类型一起使用吗?你可以在CX容器上使用std算法编译器不允许在这个设计和实现的vecI中使用begin和end,我可以确认Raman是正确的。在包含WFC::Ivector vector或pc::vector ^之后调用不合格的非成员开始()/Enter()后,将返回一个PC::Vector迭代程序,一个普通的C++类,它是一个随机访问的STL迭代器。它可以与std::sort()等STL算法一起使用。请注意,std::sort()希望将元素与op@ppaulojr我刚刚被VisualStudio2015 RC的这个问题绊倒了。我的问题是我使用的是std::begin,但这些集合的非成员begin函数位于WFC命名空间中。删除上面答案中的std::like修复了我的问题,因为我有一个用于WFC命名空间的using namespace语句。也许这就是你遇到的问题。