C++ 并行工作但未达到预期效果
。 . . . .. . . . .. . . . . . . . .. . .C++ 并行工作但未达到预期效果,c++,arrays,C++,Arrays,。 . . . .. . . . .. . . . . . . . .. . . .问题: 当您进行投票时(),您可以使用countryInd索引将分数输入到voteTotal: voteTotal[countryInd[i]] = voteTotal[countryInd[i]] + score; // in voting() 因此,您希望国家名称的顺序及其相关分数id都使用countryInd[]中定义的访问顺序 // score of countries.at(countryInd[i
.问题: 当您进行投票时(),您可以使用
countryInd
索引将分数输入到voteTotal
:
voteTotal[countryInd[i]] = voteTotal[countryInd[i]] + score; // in voting()
因此,您希望国家名称的顺序及其相关分数id都使用countryInd[]
中定义的访问顺序
// score of countries.at(countryInd[i]) corresponds to valueTotal[countryInd[i]]
当您使用BubbleSort()
时,您可以交换countryInd[]
和voteTotal[]
中的元素。这就是问题的原因,因为国家名称的正确访问顺序仍然是countryInd[i],但现在分数是i:
//score of countries.at(countryInd[i]) corresponds now to valueTotal[i]
您已经知道这一点,因为这正是您在printRankedTable()中使用的逻辑
不幸的是,当您进行第二次投票时,您再次假设两个表使用在countryInd[]
中定义的相同访问序列,这是一个不再有效的假设。你最终会把一个国家的投票数加到另一个国家的投票总数中
解决方案
将if子句中的BubbleSort()
更改如下:
if (arr[countryInd[i]] < arr[countryInd[i + 1]]) // indirect access through countryInd
{
//tmp = arr[i]; delete => no longuer needed
//arr[i] = arr[i + 1]; delete => no longuer needed
//arr[i + 1] = tmp; delete => no longuer needed
tmpC = countryInd[i];
countryInd[i] = countryInd[i + 1];
countryInd[i + 1] = tmpC;
swapped = true;
}
寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。
这不是冒泡式的问题。看起来,冒泡排序函数在将单个项目冒泡到顶部时立即返回。尽管如此,它仍然有效。我对排序功能很满意。我的主要问题是voteTotal函数true:排序函数排序很好。不幸的是,通过对分数和访问国家的顺序进行排序,您造成了不匹配。
cout << countries.at(countryInd[i]) << "\t" << voteTotal[countryInd[i]] << endl; // only indirect access via countryInd