std :: multimap中键的要求

时间:2008-10-18 23:00:17

标签: c++ multimap

我有一个std :: multimap,其中key是一个自定义类。像这样:

Class X {
public:
    std::string s;
    int x;
    operator <(const X& other) const { return s < other.s; }
};
std::multimap<X, int> mymap;

现在,我想使用upper_bound和lower_bound迭代具有相同值“s”的所有元素。我是否需要为X实现一些其他运算符(例如:==)。或者它会像这样正常工作?

另外,我应该提供什么作为 upper_bound lower_bound 的参数?我假设我应该创建一个具有所需“s”值的虚拟对象?

2 个答案:

答案 0 :(得分:5)

由于class X是多图的关键,因此upper_bound() / lower_bound()的参数必须属于该类型。如果class X具有std::string的隐式转化(X::s的类型),那么您可以将其用作upper_bound() / lower_bound()的参数。< / p>

多图的默认比较为less<>,只需调用operator <() - 因此,您需要在class X中使用多个地图才能运行。

答案 1 :(得分:0)

你只需要提供一个运算符==和&lt;。

upper_bound和lower_bound与任何其他find-type方法一样,因此您需要使用相同类型的对象进行比较 - 在​​您的情况下,需要具有所需值s的“虚拟”对象。

修改:评论是正确的,您只需要运营商&lt;对于lower / upper_bound,并查找。但是如果你想在容器上调用其他方法,你也需要operator ==。例如。如果你想对容器进行排序(),则需要operator ==。

所有STL容器所需的2个重载是运算符&lt;和运算符==。我找到了最佳实践来实现它们。

当然,通过在地图中实现比较仿函数而不依赖于对象,也可以更充分地回答这个问题。这通常是在地图上实现调用find()的不同方法的好方法。