stl中各種容器的自定義比較函式
class elem
{
public:
elem();
elem(int aa):a(aa){}
public:
int a;
int getA()
{
return a;
}
};
class elem1
{
public:
elem1();
elem1(int aa):a(aa){}
public:
int a;
int getA()
{
return a;
}
friend bool operator < (const elem1 &e1,const elem1 &e2)//只能過載<
{
return e1.a <e2.a;//大頂堆是<;小頂堆是>
}
};
class Scorer
{
public:
bool operator ()(const elem &e1,const elem &e2)
{
return e1.a<e2.a;
}
};
bool Cmp(const elem &e1,const elem &e2)
{
return e1.a <e2.a;
}
int main()
{
vector<elem> ve;
ve.push_back(elem(5));
ve.push_back(elem(6));
ve.push_back(elem(7));
ve.push_back(elem(1));
ve.push_back(elem(0));
ve.push_back(elem(19));
ve.push_back(elem(60));
ve.push_back(elem(61));
ve.push_back(elem(2));
ve.push_back(elem(68));
ve.push_back(elem(9));
list<elem> le;
le.push_back(elem(5));
le.push_back(elem(6));
le.push_back(elem(7));
le.push_back(elem(1));
le.push_back(elem(0));
le.push_back(elem(19));
le.push_back(elem(6));
priority_queue<int,vector<int>,less<int> > pq;//大頂堆//優先佇列如果用仿函式的形式,必須有三個引數
pq.push(5);
pq.push(6);
pq.push(1);
pq.push(2);
pq.push(9);
/*while (!pq.empty())
{
int t = pq.top();
cout<<t<<" ";
pq.pop();
}*/
priority_queue<elem,vector<elem>,Scorer > q;//1.自定義仿函式,也要有三個引數
q.push(5);
q.push(6);
q.push(1);
q.push(2);
q.push(9);
priority_queue<elem1> q1;//2.
q1.push(5);
q1.push(6);
q1.push(1);
q1.push(2);
q1.push(9);
set<int,less<int> > s;//從小到大
s.insert(5);
s.insert(6);
s.insert(1);
s.insert(3);
s.insert(0);
set<elem,Scorer> s1;
s1.insert(5);
s1.insert(6);
s1.insert(1);
s1.insert(3);
s1.insert(0);
set<elem,Scorer >::iterator it;
for (it = s1.begin();it!=s1.end();++it)
{
cout<<it->getA()<<" ";
}
/*while(!q1.empty())
{
elem1 e = q1.top();
cout<<e.getA()<<" ";
q1.pop();
}*/
int array[] = {5,6,7,1,0,19,6};
sort(array,array+7,greater<int>());//less<int>() 從小到大//說明greater,less和Scorer一樣都是類,而Cmp是函式;所以vector還是用Cmp形式的函式比較方便
/*for (int i=0;i<7;++i)
{
cout<<array[i]<<" ";
}
cout<<endl;*/
//sort(ve.begin(),ve.end(),Scorer());//sort(ve.begin(),ve.end(),Cmp);
//partial_sort(ve.begin(),ve.begin()+3,ve.end(),Cmp);//對前三個排序
nth_element(ve.begin(),ve.begin()+3,ve.end(),Cmp);//保證前三個最小,前三個不排序
//sort(le.begin(),le.end(),Cmp);
le.sort(Scorer());//Cmp//list的排序是要移動其內部指標的,所以只能用其內部的sort,而不能用通用的sort//也不能用nth_elements之類的排序
/*vector<elem>::iterator it;
for (it = ve.begin();it!=ve.end();++it)
{
cout<<it->getA()<<" ";
}*/
cout<<endl;
}
stl中各種容器的自定義比較函式的方法,vector,list,set相類似,要定義一個比較類,類裡面有比較成員函式 bool operator ()(const,const),並且return a<b 是從小到大排序
priority_queue有些不同,主要表現在return a<b是大頂堆
所有的共同之處是,都可以通過定義一個比較類實現排序
相關文章
- STL容器的各個函式方法函式
- cmp是可選的自定義比較函式函式
- Hive中自定義函式Hive函式
- JAVA中的Comparable介面和自定義比較器Java
- Python 中 sorted 如何自定義比較邏輯Python
- [C++] 自定義C++比較器比較大小C++
- c/c++ 標準庫 set 自定義關鍵字型別與比較函式C++型別函式
- 字串比較的常用函式字串函式
- Oracle 自定義函式Oracle函式
- shell自定義函式函式
- excel 字元比較函式Excel字元函式
- caffe中各種cblas的函式使用總結函式
- sql中select列有自定義函式 dblinkSQL函式
- Hive常用函式及自定義函式Hive函式
- JS嵌入html的方式及各種方式的比較JSHTML
- hive 3.0.0自定義函式Hive函式
- python教程:自定義函式Python函式
- [譯] 為函式自定義屬性的八種實現方法函式
- JavaScript - 函式 setTimeout 和 setInterval 的比較JavaScript函式
- C++宏和函式的比較C++函式
- java自定義equals函式和hashCode函式Java函式
- C和C++篇——各種各樣的函式C++函式
- 轉載:在c#中使用sqlite的3種自定義函式C#SQLite函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- MySQL:MySQL層比較函式呼叫MySql函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- apiAutoTest:支援自定義函式,用例中可呼叫API函式
- HIVE自定義函式的擴充套件Hive函式套件
- Hive--->建立自定義的UDTF函式Hive函式
- 請教,blade模板中怎麼呼叫自定義的函式?函式
- 動畫函式的繪製及自定義動畫函式動畫函式
- JavaScript 匿名函式與具名函式執行效率比較JavaScript函式
- stl中的sort函式,你真的瞭解嗎函式
- MySQL使用之五_自定義函式和自定義過程MySql函式