error: invalid operands to binary expression(map使用find时编译发生错误)

新手上路,请多包涵
#include <iostream>
#include <map>
#include <utility>
using namespace std;
class __ME
{
public:
    int age;
    __ME()
    {
    }
    __ME(int a)
    {
        age = a;
    }
    void Run()
    {
        if (age)
        {
            cout << "年龄是" << age << endl;
        }
        else
        {
            cout << "run..." << endl;
        }
    }
};

template <class K, class V>
class value_equals
{
private:
    K key;

public:
    value_equals(const K &vt) : key(vt)
    {
    }
    bool operator==(map<const K, V> &elem)
    {
        return elem->first == key;
    }
};

int main()
{
    map<string, __ME *> *me1 = new map<string, __ME *>();
    me1->insert(map<string, __ME *>::value_type("lyl", new __ME()));
    me1->insert(map<string, __ME *>::value_type("lx1", new __ME()));
    map<string, __ME *>::iterator it = find(me1->begin(), me1->end(), value_equals<string, __ME *>("lyl"));
    cout << it->first << endl;
}

这段代码我在编译时 ,提示 error: invalid operands to binary expression 请问是我哪里做错了吗?

阅读 7.4k
1 个回答

你代码里倒数第三行用了find,而find(beg,end,val)是查找等于值val的元素,应该用find_if(beg,end,unaryPred),查找满足一元谓词条件的元素。
最后几行改为:

    map<string, __ME *>::iterator it = std::find_if(me1->begin(), me1->end(), value_equals<string, __ME *>("lx1"));
    if (it != me1->end())
    {
        cout << it->first << endl;
    }

另外,

bool operator==(map<const K, V> &elem)
    {
        return elem->first == key;
    }

应该改为:

    bool operator()(pair<const K, V> &elem)
    {
        return elem.first == key;
    }

记得开头加上

#include <algorithm>
#include <string>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏