C ++使用find_if

时间:2018-02-01 06:57:23

标签: c++ lambda stl

我正在尝试查找字符串是否包含任何指令形式 machine_opTable ,一个pair-string的向量,int。

我的lambda函数在find_if中应该是什么样的? 如果您有任何其他方法,请告诉我。

截至目前,我的代码看起来像......

# define RX 4
# define RR 2

...

vector < pair <string, int> > machine_opTable = { {"L", RX},
                                                  { "A", RX},
                                                  {"ST", RX}
                                                };

words = " L 1, SMB1";

string inMachineop;
for ( auto instruction: words){

    inMachineop = find_if ( begin(machine_opTable), end(machine_opTable), [] (const pair<string,int>& p) { return  ( p.first == instruction ? p.first : "NOTFOUND"); });

}

我很想返回指向那对的迭代器...请告诉我它是如何完成的。

谢谢。

2 个答案:

答案 0 :(得分:3)

根据参考值从find_if返回值

  

pred未返回false的范围中第一个元素的迭代器。

pred是你的lambda,它必须返回bool值。 如果要在lambda中使用instruction,则必须捕获此变量

[instruction] (const pair<string,int>& p) { return  p.first == instruction; }

并且当我们知道它时调用find_if返回迭代器,如下所示

auto it = find_if ( begin(machine_opTable), end(machine_opTable), [instruction] (const pair<string,int>& p) { return  p.first == instruction; });
if (it != machine_opTable.end())
{
    // access to found pair
}
else 
    ; // pair not found

答案 1 :(得分:1)

我在这里看到一个错误:

for ( auto instruction: words){

您按字符迭代,而不是按此处的字词。你需要先按空格分割。尝试将此代码用于该任务https://stackoverflow.com/a/27511119/9187525

其他人解释了与find_if()相关的错误:)