利用sort排序

来源:互联网 发布:淘宝权重怎么查 编辑:程序博客网 时间:2024/05/21 15:38

京东笔试题:

说是一批订单,包含名字和价格,让实现一个函数按照价格排序

struct Items{string name;int price;};bool com(Items a, Items b){return a.price < b.price;}int main(){Items val;vector<Items> vec;for(int i = 0; i < 5; i++){cin>>val.name>>val.price;vec.push_back(val);}sort(vec.begin(), vec.end(),com);for(int i = 0; i < 5; i++)cout<<vec[i].name<<" "<<vec[i].price<<endl;return 0;}

找出一组数组中前k个最小的数

用排序的话时间复杂度nlgn,用以下方法nlgk

typedef multiset<int,greater<int> > iSet;typedef multiset<int, greater<int> >::iterator iSetIter; //因为multimap/multiset存在多个相同的键,所以不能和map,set那样直接用下标void GetLeastNumbers(vector<int>& vec, iSet& LeastNum, int k){LeastNum.clear();if(vec.size() < k || k < 1)return;vector<int>::iterator iter = vec.begin();for(; iter != vec.end(); iter++){if(LeastNum.size() < k)LeastNum.insert(*iter);else{iSetIter setIter = LeastNum.begin(); //取出最大值if(*setIter > *iter) //如果set中最大那个数比当前的数大,则删除并插入当前的新数{//LeastNum.erase(*setIter);//不能这样,这样会把键值为*setIter的都删掉LeastNum.erase(setIter);LeastNum.insert(*iter);}}}}int main(){vector<int> vec;iSet s;int val;while(cin>>val)vec.push_back(val);int k = 5;GetLeastNumbers(vec,s,k);cout<<"输出前"<<k<<"个最小的数:"<<endl;for(iSetIter iter = s.begin(); iter != s.end(); iter++)cout<<*iter<<" ";cout<<endl;return 0;}



0 0