Скажем, у меня был std::vector<std::pair<int, std::vector<int> > >
, то есть вектор, содержащий пары целых чисел к векторам. (Я знаю, что могу добиться того же с помощью карты, но я не об этом спрашиваю)
Как бы я искал int (тот, что в паре), используя STL? Я написал решение, которое работает:
struct FindFirst {
FindFirst(int i) : toFind(i) { }
int toFind;
bool operator()
( const std::pair<int, std::vector<int> > &p ) {
return p.first==toFind;
}
};
Это можно использовать так:
int valueToFind = 4;
std::find_if(myVec.begin(), myVec.end(), FindFirst(valueToFind));
Но мне это кажется немного уродливым; должен быть лучший способ.
Так есть ли лучше способы сделать это без с использованием чего-либо из C ++ 0x или Boost?
(Потому что я пытаюсь изучить лучший способ сделать это, и я подчеркиваю, только STL )
EDIT:
Похоже, есть небольшая путаница в том, что я спрашиваю. Больше всего меня интересует, является ли плохой практикой использование конструктора для поиска значений в функторе, особенно когда они используются в алгоритмах STL.