【发布时间】:2013-10-10 04:25:48
【问题描述】:
如果std::multimap 的键和值属于同一类型,它是否有意义?
真正的代码要复杂得多,但例如我有一个类Point,我想找到该类型的类似对象:
bool
ComparePoints::operator()(Point* const p1, Point* const p2) const {
if (p1->x > p2->x) return false;
if (p1->x < p2->x) return true;
...
return false;
}
为此,我可以使用带有比较功能的std::multimap,然后使用 MultiMap::equal_range 获取一组对象。
std::multimap<Point*, Point*, ComparePoints> pointsMap;
这对我来说很好,但我觉得 value 字段变得多余了。我需要寻求更好的解决方案吗?
已编辑:
我正在从一个对象映射到完全相同的对象
pointsMap.insert(std::pair<Point*, Point*>(p, p));
使值变得多余,所以我可能应该使用 std::multiset 来代替 @john 提到的。
【问题讨论】:
-
也许你想要一个 std::multiset 代替?像 std::multimap 但只有键,没有值。
-
不用过多批评,是的,这是有道理的,一个是您的关键,另一个是您的价值。你不应该因为类型而挂断电话。