Multimap与operator ==不匹配

时间:2015-07-22 15:16:54

标签: c++ c++11 multimap

我在multimap内有Bar classunsigned long,并且Foo class的引用。

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);
}

现在我想从多图中检索所有值并删除一些。

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);
    }
}

问题

如何比较(second == var2)

(我想要的是找到多图中的所有条目,并删除find_and_erase()函数中与函数参数匹配的条目。不知道是否有更简单的解决方案)

1 个答案:

答案 0 :(得分:2)

定义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); }

另外,根据n.m.'s comment,假设你有一个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);
        }
    }
}