减少大数据的条件语句
Reducing Condition statement for Large data
我正在用C++做一些示例程序。我的文本文件中有 100,000 个单列数据。我将所有数据加载到一个std::vector中。现在我需要检查每个数据的第一个字符是"#"还是"%"或"$"。数据以"#"、"$"、"%"的方式排序。我可以像下面这样做编程。
for ( i = 0; i < myArray.size(); i++)
{
if(mrarray[i][0]=='#')
{
// do some process for '#' values
}
else if(mrarray[i][0]=='$')
{
// do some process for '$' values
}
else if(mrarray[i][0]=='%')
{
// do some process for '%' values
}
}
我的问题是" 这是最好的方法吗? .还有其他方法可以更有效地完成此程序吗?" ???
这几乎是最有效的,唯一能让它更快一点的是使用 switch 语句。
for ( i = 0; i < myArray.size(); i++)
{
switch(myArray[i][0]){
case '#':
// Do stuff
break;
case '$':
// Do stuff
break;
case '%':
// Do stuff
break;
}
}
我也假设你只做一次。如果您使用相同的数据多次执行此操作,则可以通过对其进行排序来提高效率。如果是这种情况,请告诉我,我会更新我的答案。
由于 why-is-processing-a-sorted-array-fast-by-unsorted-array 中的状态,首先对行进行排序(基于第一个字符)然后处理向量可能更有效。
大卫提出的转换声明将是我的选择。
但作为替代方案,您可以尝试一个函数指针数组,如下所示:
using my_function_pointer = void (*)(const std::string&/*, other required stuff*/);
const my_function_pointer funs[256] = { dummy_f, dummy_f, .., f_charp, f_dollar, f_mod, dummy_f, ..};
for ( i = 0; i < myArray.size(); i++) {
funs[myArray[i][0]](myArray[i] /*, other required stuff*/);
}
无论如何,您需要对更改进行基准测试,以进行任何优化。
相关文章:
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- CPP 带有条件语句的内在事物
- 如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?
- C++ - 这个条件语句写得正确吗?还是有更有效的写法?
- 条件语句简化 - C++
- 如何在C++中定义扩展到条件语句的宏?
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 是否可以编写C++不使用任何条件语句交换输入的函数?
- C++未检查条件语句
- 输出错误命令的条件语句
- 是否可以删除此条件语句
- 如何在Char数组中搜索Char在IF条件语句中
- 可视化优雅C++代码:如何使用 while 循环和条件语句编写更高效的代码
- 输入未正确读取条件语句
- 我可以将循环用作如果其他条件语句
- 是否可以将结构与条件语句完全相同的字符串转换为可以读取和操作的语句?
- 简化重叠和条件语句
- 如果条件语句中的变量分配
- C++模板中的条件语句,只能由编译器基于条件包含
- 在条件语句中接受和使用 char