vector的partial_sort的用法

求助:vector的partial_sort的用法?
下面是我的程序:

#include   <vector>
using   namespace   std;
#include   <algorithm>

typedef   struct   VectorItem{
int   nIndex;
double   dPower;
}VectorItem;

partial_sort(vectoritem.begin(),vectoritem.begin()+20,vectoritem.end(),rule);

bool   CMyTestDefineDlg::rule(   const   VectorItem&   p1,   const   VectorItem&   p2   )
{
return   p1.dPower   >   p2.dPower;
}

我想取出vectoritem中dpower在前20的数,上面是我的代码,可是运行有错误,请高手指点。

------解决方案--------------------
我没看出有什么错误,用你的代码我写了一个程序,调试后结果是正确的.

// use dev-cpp 4.9.2

#include <vector>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iterator>

using namespace std;

typedef struct
{
int nIndex;
double dPower;
}VectorItem;

bool rule( const VectorItem& p1, const VectorItem& p2 )
{
return p1.dPower > p2.dPower;
}

int main()
{
vector <VectorItem> vectoritem(30);
for (int i=0; i <30; i++)
{
vectoritem[i].nIndex = i;
vectoritem[i].dPower = rand()%30;
}

cout < < "before sort\n ";
for (int i=0; i <30; i++)
{
cout < < "pos: " < < vectoritem[i].nIndex < < " dpower: " < < vectoritem[i].dPower < < '\n ';
}

partial_sort(vectoritem.begin(), vectoritem.begin()+20, vectoritem.end(), rule);

cout < < "after sort\n ";
for (int i=0; i <30; i++)
{
cout < < "pos: " < < vectoritem[i].nIndex < < " dpower: " < < vectoritem[i].dPower < < '\n ';
}

cout < < endl;

/*
int A[] = {7, 2, 6, 11, 9, 3, 12, 10, 8, 4, 1, 5};
const int N = sizeof(A) / sizeof(int);

partial_sort(A, A + 5, A + N);
copy(A, A + N, ostream_iterator <int> (cout, " "));
//*/

system( "pause ");
return 0;
}

------解决方案--------------------
partial_sort(vectoritem.begin(),vectoritem.begin()+20,vectoritem.end(),rule);这里用到的是一个定义在global namespace的rule函数,而你的rule函数是CMyTestDefineDlg::rule,明显不一致