我要重构一些重复的代码。两个函数都使用在多图中搜索 equal_range()。在调用equal_range()之后的for循环中,有一个for循环设置 一个itoran to equalRange.first,条件为!= equalRange.second。
如果找到正确的值,则两个功能不同。我想做的是 将搜索功能作为以前使用的自己的帮助功能 提到两个。
使这项工作不是问题。问题是我找不到办法 以对使用此代码的其他人有意义的方式使其“简单”和未来证明。 显然,我想从搜索功能返回一些东西。
如果我要返回一个布尔值来指示是否在multimap中找到了值,我会的 必须将迭代器传递给指向元素的multimap。我觉得很好 丑陋。
如果返回了迭代器,我们当然必须检查它 边界返回使用搜索功能的两个函数。我们无法检查 对multimap.end()因为我们使用equal_range所以equalRange.second不必 等于multimap.end()。
使用边界检查returnIter == checkBound(x),其中checkBound(x)返回 multimap :: upperbound(x)使checkBound(x)知道equal_range实现 搜索功能。因此,如果其他人要更改搜索功能, checkBound(x)可能无法正常工作。
我的观点是,搜索功能的用户不应该关心它的实现方式,即不应该知道它使用的是equal_range。
您对此有何建议?我在这里过于详细吗?你将如何实现搜索功能?
由于
答案 0 :(得分:1)
而不是返回值的任何一个/或决定,我觉得你想做像map::insert
那样的功能 - 返回一个std::pair<iterator, bool>
来表示位置和搜索功能的成功/失败。