一、map比较函数
利用map在插入键值对时会自动排序,我们可以灵活的实现对数据的各种排序要求。如排序并获得排序前对应的角标索引, 不排序获得排序后的名次。
二、代码试下
下面是使用map获得排序名次的一个示例:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class a
{
public:
struct strA
{
double d;
int I;
};
};
int main()
{
vector<a::strA> a;
a.resize(5);
a[0].d = 2;
a[1].d = 3;
a[2].d = 0;
a[3].d = -1;
a[4].d = 8.4;
map<double,int> temp;
for(int i = 0;i < a.size();++i)
temp.insert(make_pair(a[i].d,i)); //数据放入map中会自动按键值升序排序
int i = a.size();
for(map<double,int>::iterator it = temp.begin();it != temp.end();++it)
{
a[it->second].I = i;
i--;
}
for(int i = 0;i < a.size();++i)
cout<<a[i].d<<","<<a[i].I<<endl;
return 0;
}
代码执行结果如下:
2,3
3,2
0,4
-1,5
8.4,1
前面是需要排序的数( strA.d
),后面是对应的排序名次( strA.i
)。 实际上map的比较函数是可以自定义的,利用这一点我们可以更灵活的进行排序。