c++更快的if else语句
c++ faster if else statements
我是一个新的c++用户,并编写了一个与其他函数一起工作的代码。我需要修改代码与if &else if语句,这导致整个代码运行4.6333分钟,而修改前为0.61分钟(注意,这些持续时间是针对整个代码的,而不是针对下面我粘贴的示例)。
下面以"only"修改过的部分为例(可以在c++中单独运行)。
谁有任何建议得到这个代码更快?
#include <iostream>
#include <vector>
#include <fstream>
#include <ctime>
using namespace std;
int main()
{
static const double InflVecVals001[9] = { 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0 };
int FloorMnodeTagscol1[6] = { 11, 12, 13, 14, 15, 16 }; int FloorMnodeTagscol6[6] = { 61, 62, 63, 64, 65, 66 };
int FloorMnodeTagscol2[6] = { 21, 22, 23, 24, 25, 26 }; int FloorMnodeTagscol7[6] = { 71, 72, 73, 74, 75, 76 };
int FloorMnodeTagscol3[6] = { 31, 32, 33, 34, 35, 36 }; int FloorMnodeTagscol8[6] = { 81, 82, 83, 84, 85, 86 };
int FloorMnodeTagscol4[6] = { 41, 42, 43, 44, 45, 46 }; int FloorMnodeTagscol9[6] = { 91, 92, 93, 94, 95, 96 };
int FloorMnodeTagscol5[6] = { 51, 52, 53, 54, 55, 56 };
int tagNode = 91;
double fact;
if ((tagNode == FloorMnodeTagscol1[0]) || (tagNode == FloorMnodeTagscol1[1]) || (tagNode == FloorMnodeTagscol1[2]) || (tagNode == FloorMnodeTagscol1[3]) || (tagNode == FloorMnodeTagscol1[4]) || (tagNode == FloorMnodeTagscol1[5]))
{
fact = InflVecVals001[0];
}
else if ((tagNode == FloorMnodeTagscol2[0]) || (tagNode == FloorMnodeTagscol2[1]) || (tagNode == FloorMnodeTagscol2[2]) || (tagNode == FloorMnodeTagscol2[3]) || (tagNode == FloorMnodeTagscol2[4]) || (tagNode == FloorMnodeTagscol2[5]))
{
fact = InflVecVals001[1];
}
else if ((tagNode == FloorMnodeTagscol3[0]) || (tagNode == FloorMnodeTagscol3[1]) || (tagNode == FloorMnodeTagscol3[2]) || (tagNode == FloorMnodeTagscol3[3]) || (tagNode == FloorMnodeTagscol3[4]) || (tagNode == FloorMnodeTagscol3[5]))
{
fact = InflVecVals001[2];
}
else if ((tagNode == FloorMnodeTagscol4[0]) || (tagNode == FloorMnodeTagscol4[1]) || (tagNode == FloorMnodeTagscol4[2]) || (tagNode == FloorMnodeTagscol4[3]) || (tagNode == FloorMnodeTagscol4[4]) || (tagNode == FloorMnodeTagscol4[5]))
{
fact = InflVecVals001[3];
}
else if ((tagNode == FloorMnodeTagscol5[0]) || (tagNode == FloorMnodeTagscol5[1]) || (tagNode == FloorMnodeTagscol5[2]) || (tagNode == FloorMnodeTagscol5[3]) || (tagNode == FloorMnodeTagscol5[4]) || (tagNode == FloorMnodeTagscol5[5]))
{
fact = InflVecVals001[4];
}
else if ((tagNode == FloorMnodeTagscol6[0]) || (tagNode == FloorMnodeTagscol6[1]) || (tagNode == FloorMnodeTagscol6[2]) || (tagNode == FloorMnodeTagscol6[3]) || (tagNode == FloorMnodeTagscol6[4]) || (tagNode == FloorMnodeTagscol6[5]))
{
fact = InflVecVals001[5];
}
else if ((tagNode == FloorMnodeTagscol7[0]) || (tagNode == FloorMnodeTagscol7[1]) || (tagNode == FloorMnodeTagscol7[2]) || (tagNode == FloorMnodeTagscol7[3]) || (tagNode == FloorMnodeTagscol7[4]) || (tagNode == FloorMnodeTagscol7[5]))
{
fact = InflVecVals001[6];
}
else if ((tagNode == FloorMnodeTagscol8[0]) || (tagNode == FloorMnodeTagscol8[1]) || (tagNode == FloorMnodeTagscol8[2]) || (tagNode == FloorMnodeTagscol8[3]) || (tagNode == FloorMnodeTagscol8[4]) || (tagNode == FloorMnodeTagscol8[5]))
{
fact = InflVecVals001[7];
}
else if ((tagNode == FloorMnodeTagscol9[0]) || (tagNode == FloorMnodeTagscol9[1]) || (tagNode == FloorMnodeTagscol9[2]) || (tagNode == FloorMnodeTagscol9[3]) || (tagNode == FloorMnodeTagscol9[4]) || (tagNode == FloorMnodeTagscol9[5]))
{
fact = InflVecVals001[8];
}
else
{
fact = 1.0;
}
//cout << "n tagnode:" << tagNode << endl;
//cout << "n factor:" << fact << endl;
cin.get();
return 0;
}
对于您的示例代码,您可以简单地使用
if ((tagNode - 1) % 10 < 6 && 11 <= tagNode && tagNode <= 96) {
fact = (tagNode / 10) * 100.;
} else {
fact = 1.;
}
但是假设值不像您的示例中那样是简单的范围,并且您必须多次执行映射,您可以这样做:
static const std::map<int, double> m = {
{ 11, 100.}, {12, 100.}, {13, 100.}, {14, 100.}, {15, 100.}, {16, 100.},
{ 21, 200.}, {22, 200.}, {23, 200.}, {24, 200.}, {25, 200.}, {26, 200.},
{ 31, 300.}, {32, 300.}, {33, 300.}, {34, 300.}, {35, 300.}, {36, 300.},
{ 41, 400.}, {42, 400.}, {43, 400.}, {44, 400.}, {45, 400.}, {46, 400.},
{ 51, 500.}, {52, 500.}, {53, 500.}, {54, 500.}, {55, 500.}, {56, 500.},
{ 61, 600.}, {62, 600.}, {63, 600.}, {64, 600.}, {65, 600.}, {66, 600.},
{ 71, 700.}, {72, 700.}, {73, 700.}, {74, 700.}, {75, 700.}, {76, 700.},
{ 81, 800.}, {82, 800.}, {83, 800.}, {84, 800.}, {85, 800.}, {86, 800.},
{ 91, 900.}, {92, 900.}, {93, 900.}, {94, 900.}, {95, 900.}, {96, 900.}
};
auto it = m.find(tagNode);
fact = ((it != m.end()) ? it-> second : 1.);
演示的-
N log N
用于地图构建(完成一次)。 -
log(N)
搜索复杂度。
而不是线性搜索
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如果 else 语句不断循环
- C++ If/Else 语句被跳过
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 如何将 if else 语句重写为 switch 语句
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如果 else 语句使用大写和小写字母
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 嵌套的 else 语句 c++
- 为什么切换 if else 语句的顺序会导致错误?
- 如何使用 if else 语句
- if/else 语句输出由于加号或减号而未显示正确的消息
- if-else 语句仅按特定顺序工作,我不知道为什么
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 如何在C++中为 if 和 else 语句定义新行为
- 如何在 if-else 语句中使用 C++20 的可能/不太可能属性
- While循环和if/else语句工作不正常