gpt4 book ai didi

c++ - Multimap 与运算符不匹配==

转载 作者:行者123 更新时间:2023-11-28 02:23:13 24 4
gpt4 key购买 nike

我在 Bar 类 中有这个 multimap,带有 unsigned long 和对 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);
}

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

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() 函数中与函数参数匹配的条目。不知道是否有更简单的解决方案为此)

最佳答案

Foo 定义相等函数:

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

关于c++ - Multimap 与运算符不匹配==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31567283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com