1

我即将重构一些重复的代码。两个函数都使用 equal_range() 在多图中搜索。在调用 equal_range() 之后的 for 循环中,有一个 for 循环将迭代器设置为 equalRange.first,条件为 it!= equalRange.second。

如果找到正确的值,则两个函数不同。我想做的是将搜索功能作为前面提到的两个使用的自己的帮助功能。

使这项工作不是问题。问题是我无法想出一种方法来使其“简单”和未来证明,以使其对使用此代码的其他人有意义。显然,我想要从搜索功能返回的东西。

如果我要返回一个布尔值来指示是否在多重映射中找到了该值,我必须将一个迭代器传递给指向该元素的多重映射。我觉得这很丑。

如果返回的是迭代器,我们当然必须在使用搜索功能的两个函数中检查边界。我们无法对照 multimap.end() 检查它,因为我们使用了 equal_range,所以 equalRange.second 不必等于 multimap.end()。

使用边界检查 returnIter == checkBound(x) 其中 checkBound(x) 返回 multimap::upperbound(x) 使 checkBound(x) 知道搜索函数的 equal_range 实现。因此,如果其他人要更改搜索功能,则 checkBound(x) 可能无法按预期工作。

我的立场是,搜索功能的用户不应该关心它是如何实现的,即不应该知道它使用了equal_range。

您对此有何意见和建议?我这里是不是太详细了?您将如何实现搜索功能?

谢谢

4

1 回答 1

1

不是对返回值进行非此即彼的决定,在我看来,您想要执行类似的功能map::insert- 返回 astd::pair<iterator, bool>以指示搜索功能的位置和成功/失败。

于 2010-01-15T12:37:44.750 回答