find_if
fromを使いたいのです#include <algorithm>
が、ベクトルが空かどうかが認識できないのが難点です。
次のスニペットを想定します
typedef std::vector< std::pair<int , int > > myVector;
myVector aVector;
struct equal: std::unary_function< std::pair<int , int >,bool >
{
equal(const int &aNum) : theNum(aNum) {}
bool operator()(const std::pair<int , int > &arg) const { return arg.first == theNum; }
const int &theNum;
};
...
void check_and_insert(int num) {
myVector::iterator it = find_if( aVector.begin(), aVector.end(), equal(num));
if (it == aVector.end())
aVector.push_back( std::make_pair(num, 1) );
else
++dit->second;
}
aVector
が空であると仮定します。の結果はそうでfind_if
はないaVector.end()
ので、else
どちらが間違っているかがわかります。これは find_if が機能する方法ですか? 奇妙ですが、最初の要素を挿入することで修正できます。
if (aVector.empty()) {
aVector.push_back( std::make_pair(num, 1) );
return;
}
// find_if...
これが唯一の解決策ですか?もっと良いアイデアはありますか?
UPDATE
コメントに記載されているように、find_ifは正しく機能します。バグはaVector
、別の関数での参照による呼び出しによって変更されたものでした。ご協力ありがとうございました。ご迷惑をおかけして申し訳ありません