1

重複したコードをリファクタリングしようとしています。2 つの関数はどちらも equal_range() を使用して multimap を検索します。equal_range() の呼び出し後の for ループには、 it != equalRange.second という条件でイテレータを equalRange.first に設定する for ループがあります。

正しい値が見つかった場合、2 つの関数は異なります。私がやりたいことは、前述の 2 つが使用する独自のヘルプ機能として検索機能を持たせることです。

それを機能させることは問題ではありません。問題は、このコードを使用している他の人にとって意味のある方法で、「簡単」かつ将来の証拠にする方法を見つけられないことです。明らかに、検索機能から何かが返されることを望みます。

マルチマップで値が見つかったかどうかを示すブール値を返す場合、要素を指すマルチマップに反復子を渡す必要があります。私はそれがかなり醜いと思います。

代わりに反復子が返された場合は、もちろん、検索関数を使用する 2 つの関数の境界に対してそれをチェックする必要があります。equal_range を使用しているため、multimap.end() に対してチェックすることはできません。

checkBound(x) が multimap::upperbound(x) を返す returnIter == checkBound(x) 境界チェックを使用すると、checkBound(x) は検索関数の equal_range 実装を認識します。したがって、他の誰かが検索機能を変更した場合、checkBound(x) が期待どおりに機能しない可能性があります。

ここでの私の立場は、検索機能のユーザーはそれがどのように実装されているかを気にするべきではないということです。つまり、それが equal_range を使用していることを知ってはいけません。

これに対するあなたの意見や提案は何ですか?私はここで詳細すぎますか?検索機能をどのように実装しますか?

ありがとう

4

1 に答える 1

1

戻り値のいずれかまたは両方の決定の代わりに、検索関数の位置と成功/失敗の両方を通知するためにmap::insert、 do - return a のような関数を実行したいように思えます。std::pair<iterator, bool>

于 2010-01-15T12:37:44.750 に答える