std :: set构造函数第二个参数错误

时间:2011-10-01 02:22:33

标签: c++ set codeblocks

代码块在此行引发错误

set<string,cmpi> m;

cmpi 功能是:

int cmpi(string one , string two )
{
    one = toLowerCase(one); 
    two = toLowerCase(two);

    if(two == one) 
        return 0;
    else 
    if (one < two ) 
        return -1;
    else 
        return 1;
}

它说(错误):

  

type/value mismatch at argument 2 in template parameter list for 'template<class _Key, class _Compare, class _Alloc> class std::set'

我的cmpi函数的返回值是否还有其他内容?

2 个答案:

答案 0 :(得分:2)

  

类型/值不匹配

事实上。 std::set需要类型,而不是函数指针():

int cmpi(string one, string two);

typedef int cmpi_t(string one, string two); // the type of cmpi

std::set<string, cmpi_t*> m (&cmpi);

答案 1 :(得分:1)

第二个参数必须是一个类型。您可以为此函数创建一个类型:

struct CmpI {
  bool operator()(const string &a,const string &b) { return cmpi(a,b)<0; }
};