C++ 多重映射与运算符不匹配==

C++ 多重映射与运算符不匹配==,c++,c++11,multimap,C++,C++11,Multimap,我在一个条形类中有这个多重映射,带有一个无符号长和一个对Foo类的引用 class Bar { //etc. struct map_sort { bool operator()(const unsigned long& e1, const unsigned long& e2) const { return (e2 < e1); }

我在一个
条形类
中有这个
多重映射
,带有一个
无符号长
和一个对
Foo类
的引用

class Bar
{
//etc.
        struct map_sort
        {
            bool operator()(const unsigned long& e1, const unsigned long& e2) const
            {
                return (e2 < e1);
            }
        };

    std::multimap<const unsigned long,const Foo&, map_sort> m_map;

    find_and_erase(const unsigned long var1, const Foo& var2);
}
类栏
{
//等等。
结构映射\排序
{
布尔运算符()(常量无符号长&e1,常量无符号长&e2)常量
{
返回(e2
现在我想从多重映射中检索所有的值并删除一些

void Bar::find_and_erase(const unsigned long var1, const Foo& var2)
{
    auto it = m_map.begin();

    for (it=m_map.begin(); it!=m_map.end(); ++it)
    {
        const unsigned long first = (*it).first;
        const Foo& second = (*it).second;
        if((first == var1) && (second == var2)) //<----ERROR No Match for operator==
            m_map.erase(it);
    }
}
void Bar::find_和_erase(const unsigned long var1,const Foo&var2)
{
auto it=m_map.begin();
for(it=m_-map.begin();it!=m_-map.end();+it)
{
const unsigned long first=(*it).first;
constfoo&second=(*it).second;

如果((first==var1)和&(second==var2))//为
Foo
s定义相等函数:

bool operator==(const Foo& a, const Foo& b) {
    // return whether Foos are equal
}
如果您定义了一个,您还需要定义
!=
以确保完整性:

bool operator=!(const Foo& a, const Foo& b) { return !operator==(a,b); }
此外,根据,如果您有一个
multimap
,您应该利用它:

void Bar::find_and_erase(const unsigned long var1, const Foo& var2)
{
    auto its = m_map.equal_range(var1);
    for (auto it = its.first; it != its.second; ++it) {
        if (it.second == var2) {
            m_map.erase(it);
        }
    }
}

Foo
实现
operator==
?您试图比较两个
Foo
s是否相等。没有任何类型的映射与之相关。此外,您没有正确使用多重映射。您手头有一个键,然后继续对该键执行线性搜索。