C++ STL map的自定义排序 | 您所在的位置:网站首页 › map改变key值 › C++ STL map的自定义排序 |
文章目录
map按键值Key排序当Key值为自定义的类时
map按值Value排序
map没有随机迭代器,只有顺序迭代器,所以不能用sort map按键值Key排序 默认按照less升序排列 #include #include using namespace std; int main() { srand((unsigned)time(NULL)); multimapmp; // multimap第三个参数默认为less,即 less int n; cin>>n; int a,b; for(int i=0; i int num,i; }IntPlus; //自定义比较规则 //注意operator是(),不是< struct Cmp { bool operator () (IntPlus const &a,IntPlus const &b)const { if(a.num!=b.num) return a.num a=rand()%4; b=rand()%4; intplus.num=a; intplus.i=b; mp.insert(pair(intplus,i)); } map::iterator iter; for(iter=mp.begin(); iter!=mp.end(); iter++) cout //当num不等时 //前一个对象的num>后一个时返回true,降序排列。 //反之升序排列 if(num!=intplus.num) return num>intplus.num; //当num相等时 //前一个对象的i bool operator () (IntPlus const &a,IntPlus const &b)const { if(a.num!=b.num) return a.num if(a.first.i!=b.first.i) return a.first.ib.second; } }上面需重新定义Key升序排列,否则sort之后仅按Value降序排列,Key值被打乱。 int main() { srand((unsigned)time(NULL)); multimapmp; int n; cin>>n; int a,b; IntPlus intplus; for(int i=0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |