bool operator == (const method &left , const method &right)
{ if (left.m.size() != right.m.size())
return false;

for (int i=0 ; i<right.m.size() ; i++)
{
if (left.m[i] != right.m[i])
{
return false;
}
}
return false;
}这是我程序的一部分,为什么不起作用了。我改成以下部分也不起作用我应该怎么写??
bool operator == (const method &left , const method &right)
{
return false;
}或
bool operator == (const method &left , const method &right)
{  return true;}

解决方案 »

  1.   

    class method
    {
    public:
    vector<int> m; bool operator()(method &r)
    {
    for (int i=0 ; i<m.size() ; i++)
    {
    if (m[i] > r.m[i])
    {
    return false;
    }
    }

    return true;
    }
    bool operator == ( const method &right)
    {

    if (m.size() != right.m.size())
    return false;

    for (int i=0 ; i<right.m.size() ; i++)
    {
    if (m[i] != right.m[i])
    {
    return false;
    }
    }
    return true;
    } method& operator=(const method &r) {

    m.assign(r.m.begin() , r.m.end());


    return *this;
    }
    };
    bool operator == (const method left , const method right)
    { if (left.m.size() != right.m.size())
    return false;

    for (int i=0 ; i<right.m.size() ; i++)
    {
    if (left.m[i] != right.m[i])
    {
    return false;
    }
    }
    return true;
    }
    class LlessR
    {
    public:
    LlessR() {}
    bool operator()(const method &l,const method &r) {
    for (int i=0 ; i<l.m.size() ; i++)
    {
    if (l.m[i] > r.m[i])
    {
    return false;
    }
    }

    return true;
    }};-----------------------------------------------------------------------
    map<method,int, LlessR> result;  //定义
    ......                           //与map无关代码
    result.insert(make_pair(met , 1));  //代码中插入就不行,
    cout<<result.size()<<endl;  //总是  =1??????????????为什么size()  总是1呢????
      

  2.   

    你对map 理解有误吧
    map<method,int, LlessR>//起比较作用的是LlessR 而非method的opeartor 除非在LlessR中调用method 的 opeartor
      

  3.   


    恩恩。就是了。我后面也改了比较函数了,就是比较函数写错了。
    那再请问:怎么写写才能让map中的元素不重复?也是在比较函数中写吗???
      

  4.   

    for (int i=0 ; i<l.m.size() ; i++)
    {
    if (l.m[i] > r.m[i])
    {
    return false;
    }else if(l.m[i] < r.m[i])
    {
    return true;
    }
    }return false;
    }
      

  5.   

    感觉只要键不重复即可,也就是LlessR对于任意两个元素的键都不返回0