有没有更有效的方法来计算百分比
Is there a more efficient way to calculate percentages?
我正在使用boost/random.hpp用区间[1,3]上的随机数填充std::map,并将每个计数的百分比与生成的数字总数相加,但我正在寻找一种可能更有效的方法。我一直试图在boost库中找到一些东西,但很难找到完全相关的东西;boost中有什么东西可以使用我的地图(我不想更改我的地图类型)并计算%或其他我应该考虑的东西吗?
int main()
{
std::map <int, long> results;
int current;
long one = 0;
long two = 0;
long three = 0;
long total = 0;
boost::random::mt19937 rng;
rng.seed(static_cast<boost::uint32_t> (std::time(0)));
boost::random::uniform_int_distribution<int> random(1,3);
for (int n = 0; n < 1000000; ++n)
{
current = random(rng);
++total;
switch (current)
{
case 1:
++one;
break;
case 2:
++two;
break;
case 3:
++three;
break;
}
}
results[1] = one;
results[2] = two;
results[3] = three;
std::cout << (double) results[1]/total*100 << std::endl; // etc.
}
edit:我不想以任何方式更改地图容器。
你说你不想更改映射类型,但我认为没有太多理由在这项工作中使用映射。似乎显而易见的选择是一个向量:
static const unsigned total = 1000000;
std::vector<unsigned> values(3);
for (int i=0; i<total; i++)
++values[random(rng)-1];
for (int i=0; i<values.size(); i++)
std::cout << (values[i] * 100.0) / total;
为什么不对其进行评测?在你知道百分比部分如何影响整个程序的速度之前,优化它是没有意义的。例如,如果百分比部分只占用程序时间的1%(大部分用于生成随机数),那么即使将效率提高一倍,速度也只会提高0.5%
高效?放弃映射并将results
声明为4个元素的数组:int results[4] = {0};
,您可以直接执行++results[current]
,而不用使用switch/case。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- 如何计算单个元素在向量<float>中所有元素之和中的百分比
- 使用C 来计算您的工作中出现字母及其百分比的次数
- 计算百分比 C++ 时产生的 inf%
- C++:计算每次迭代期间的概率百分比
- 计算中的百分比
- 在计算百分比时具有垃圾数
- 有没有更有效的方法来计算百分比
- 如何使用opencv计算人脸识别的百分比格式预测置信度
- C++快速百分比计算
- 计算概率百分比