【问题标题】:Returning from a multimap search with equal_range without being error-prone从使用 equal_range 的多图搜索返回而不会出错
【发布时间】:2010-01-15 12:32:48
【问题描述】:

我即将重构一些重复的代码。两个函数都使用 相等范围()。在调用 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。

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

谢谢

【问题讨论】:

    标签: c++ iterator return-type multimap


    【解决方案1】:

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

    【讨论】:

    • 没想到。干杯!
    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多