找最大的k个数
2015-08-19 11:20
274 查看
//可以用基于vector的heap,或者使用基于红黑树的set, 两者都给出 #include <vector> #include <set> #include <algorithm> #include <iostream> using namespace std; int ia[9] = {0, 9, 8, 3, 4, 1, 2, 7, 0}; void UseHeap(int k) { vector<int> ivec(ia, ia+9); if(k > ivec.size()) return; vector<int>::iterator iter = ivec.begin(); make_heap(iter, iter+k); for(iter = iter+k; iter != ivec.end(); ++iter) { if (*iter < *(ivec.begin())) { iter_swap(iter, ivec.begin()); pop_heap(ivec.begin(), ivec.begin()+k); push_heap(ivec.begin(), ivec.begin()+k); } } for(int i=0; i<k; ++i) cout<< ivec[i]<<" "; cout<<"finish Heap"<<endl; } void UseSet(int k) { multiset<int> mset; mset.clear(); multiset<int>::iterator mter; vector<int> ivec(ia, ia+9); vector<int>::iterator iter = ivec.begin(); for(; iter!=ivec.end(); ++iter) { if (k > mset.size()) { mset.insert(*iter); } else { mter = mset.end(); --mter; if (*iter < *mter) { mset.erase(mter); mset.insert(*iter); } } } for(mter=mset.begin(); mter!=mset.end(); ++mter) cout<< *mter <<" "; cout<<"finish set"<<endl; } int main() { UseHeap(5); UseSet(5); return 0; }
相关文章推荐
- set 命令特殊用法
- You must SET PASSWORD before executing this statement的解决方法
- 批处理 Set 命令详解 让你理解set命令第1/2页
- ASP中set与dim的区别(自己的理解)
- 深入C#中get与set的详解
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- sql Set IDENTITY_INSERT的用法
- set_include_path在win和linux下的区别
- jquery中常用的SET和GET
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 大家注意vector, list, set, map成员函数erase
- 基于SQL中SET与SELECT赋值的区别详解
- mysql之set与enum的介绍
- php set_magic_quotes_runtime() 函数过时解决方法
- MySQL的FIND_IN_SET函数使用方法分享
- .net get set用法小结第1/3页
- mysqli_set_charset和SET NAMES使用抉择及优劣分析
- asp.net get set用法第1/2页