我正在尝试查找字符串字是否包含任何指令形式 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"); });
}
我很想返回指向那对的迭代器...请告诉我它是如何完成的。
谢谢。
答案 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()
相关的错误:)