Я нашел решение, используя унарный предикат с find (.) Или find_if (.), Но мне нужна бинарная функция.
Нет - вы делаете нужен унарный предикат - в конце концов, функция find_if
сравнивается только с одним объектом (текущим объектом в списке).Ваш предикат должен знать, какое значение атрибута сравнивать с:
struct compare_with {
int attr_value;
compare_with(int attr_value) : attr_value(attr_value) { }
bool operator ()(your_object const& obj) const { return obj.attr == attr_value; }
};
Теперь вы можете вызывать find_if
:
result = find_if(your_list.begin(), your_list.end(), compare_with(some_value));
Почему я не могу просто позволить итераторубыть ссылкой на объект (например, Java) и проверить поле с помощью ссылки?
Можно.Но совершенно не ясно, что вы подразумеваете под этим.Просто переберите список.