set 自定義謂詞

對於一個模板類,好比A,在咱們要定義一個具體的對象時,A<type, type...> obj, 注意type永遠只能是類型,而不能是某個對象


#include <iostream>
#include <set>
using namespace std;
/**
*自定義比較函數
*/
bool fcmp(int l,int r)
{
    return l>r;
}
/**
*自定義一個函數對象類,若是flag爲真,那麼按升序,不然按降序,默認是降序
*/
template <class T>
class clscmp{
private:
    bool flag;
public:
    clscmp(bool f=false):flag(f){}
    bool operator()(const T &a,const T &b)
    {
        return flag?(a>b):(a<b);
    }
};
//自定義一個set類型,排序規則按照clscmp的規則排序
typedef set<int,clscmp<int> > Initset;//自定義set容器的類型,其中第三個參數類型是clscmp<int>類型
typedef bool (*fcmp_t)(int, int);
int main()
{
  int a[5]={1,2,3,4,5};

  Initset set1(a, a+5, false);//第三個參數是clscmp<int>類型,false是函數對象類初始化一個對象的參數
  Initset::iterator pos;
  for (pos = set1.begin(); pos != set1.end(); pos++) {
	  cout << *pos << endl;
  }

  //bool (*fp)(int ,int )=fcmp; //定義函數指針,將其做爲set的排序規則
  //set<int,bool(*)(int,int)> set2(a, a+5, fp);
  fcmp_t fp = &fcmp;
  set<int, fcmp_t> set2(a, a+5, fp);//第三個參數是一個函數指針,fcmp_t是第三個參數類型
  for (pos = set2.begin(); pos != set2.end(); pos++) {
	  cout << *pos << endl;
  }
  return 0;
}
相關文章
相關標籤/搜索