stl :: find_if с поиском пользователя - PullRequest
2 голосов
/ 03 октября 2009

Мне было интересно, есть ли способ использовать stl :: find_if для поиска введенного пользователем значения

Я не знаю, чтобы сделать это без использования каких-либо плохих соглашений (глобальных) или добавления множества расширенного кода.

Например, если пользователь вводит целое число x для 10, то я хочу найти вектор целых чисел

iterator = find_if(begin,end,pred) //but how does pred know the user inputted value?

Ответы [ 3 ]

6 голосов
/ 04 октября 2009

Вы можете использовать equal_to:

find_if(a.begin(), a.end(), bind2nd(equal_to<int>(), your_value));
5 голосов
/ 03 октября 2009

pred должен быть экземпляром типа с оператором overloaded (), поэтому его можно вызывать как функцию.

struct MyPred
{
    int x;

    bool operator()(int i)
    {
        return (i == x);
    }
};

(здесь для краткости используется struct)

std::vector<int> v;

// fill v with ints

MyPred pred;
pred.x = 5;

std::vector<int>::iterator f 
     = std::find_if(v.begin(), 
                    v.end(), 
                    pred);

Написание пользовательских классов, подобных этому (с «загрузкой» кода!), По меньшей мере громоздко, но будет значительно улучшено в C ++ 0x при добавлении лямбда-синтаксиса.

3 голосов
/ 04 октября 2009

Вы можете использовать boost :: bind, для более общего решения, например:

struct Point
{
 int x;
 int y;
};


vector< Point > items;

find_if( items.begin(), items.end(), boost::bind( &Point::x, _1 ) == xValue );

найдет точку, x которой равно xValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...