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,明显不一致
下面是我的程序:
#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,明显不一致