如何在std :: vector中查找具有特定成员值的类的实例

时间:2015-06-25 13:48:22

标签: c++ vector

我正在尝试实现一个简单的确定性有限自动机。我有automaton std::vector<transitions*>。现在,只要收到输入,就应该确定要执行哪个转换。这是我想通过以下功能实现的目标!

现在这是该功能需要做的事情:在向量中搜索唯一转换两者 cursor->input = inputValue cursor->from = inputFrom为真,然后返回cursor(这由emit transitionToExecute(cursor)完成,不用担心)。

这是我到目前为止所做的。

void automaton::getTransition(int inputValue, state inputFrom){
    iterA cursor = find(transitions.begin(), transitions.end(), inputValue);
    if(cursor!=transitions.end()){
        if(cursor->from.getId() == inputFrom.getId()){
            emit transitionToExecute(cursor);
            return;
        }
    }
}

编辑:我已经尝试了链接问题的答案,但我真的不明白它们是如何工作的。有人关心解释吗?这是我尝试过的。我不明白这项技术是如何运作的,所以我很感激一个详细的答案。

struct isCorrectTransition : std::unary_function<transition*, bool> {

    // The first variable that must be matched.
   int inputValue;

    // I want to use this second variable, too! How to do that?
    state inputFrom;

    // How does the following line work? What does it do? 
    // How to add in state inputFrom?
    isCorrectTransition(int inputValue):inputValue(inputValue){ }
    bool operator()(transition* const& inputTransition) const {
        return ((inputTransition->getInput() == inputValue) && (inputTransition->getFrom().getId() == inputFrom.getId()));
    }
};

void automaton::getTransition(int inputValue, state inputFrom){
    searchInput = inputValue;
    searchState = inputFrom;
    iterA cursor = find_if(transitions.begin(), transitions.end(), isCorrectTransition(inputValue));
    if(cursor!=transitions.end()){
        emit transitionToExecute(*cursor);
        return;
    }
}

0 个答案:

没有答案