gpt4 book ai didi

c++ - 检查列表和运行处理程序

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:21 25 4
gpt4 key购买 nike

我发现自己经常编写类似这样的代码:

set<int> affected_items;
while (string code = GetKeyCodeFromSomewhere())
{
if (code == "some constant" || code == "some other constant") {
affected_items.insert(some_constant_id);
} else if (code == "yet another constant" || code == "the constant I didn't mention yet") {
affected_items.insert(some_other_constant_id);
} // else if etc...
}
for (set<int>::iterator it = affected_items.begin(); it != affected_items.end(); it++)
{
switch(*it)
{
case some_constant_id:
RunSomeFunction(with, these, params);
break;
case some_other_constant_id:
RunSomeOtherFunction(with, these, other, params);
break;
// etc...
}
}

我最终编写这段代码的原因是我只需要在第二个循环中运行函数一次,即使我已经收到多个可能导致它们运行的​​键码。

这似乎不是最好的方法。有没有更简洁的方法?

最佳答案

一种方法是维护从字符串到 bool 值的映射。主要逻辑可以从以下内容开始:

if(done[code])
continue;
done[code] = true;

然后您可以在识别代码后立即执行适当的操作。

另一种方法是将一些可执行的东西(对象、函数指针等)存储到一种“待办事项列表”中。例如:

while (string code = GetKeyCodeFromSomewhere())
{
todo[code] = codefor[code];
}

为每个代码值初始化 codefor 以包含适当的函数指针或从公共(public)基类派生的对象。如果相同的代码出现不止一次,则待办事项中的相应条目将被其已有的相同值覆盖。最后,遍历 todo 并运行它的所有成员。

关于c++ - 检查列表和运行处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/241955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com