我试图通过for循环找到最多值的值。我没有使用排序函数currentChar
和mostChar
是cv::Vec3b
值。该计划如下所示:
for (int z = 0; z < temp.size(); z++)
{
currentChar = temp[z];
mostChar = temp[z];
currentCount = 0;
mostCount = 0;
for (int i =0; i < temp.size(); i++)
{
cv::Vec3b c = temp[i];
if (c == currentChar)
currentCount++;
if (currentCount > mostCount)
{
mostChar = currentChar;
mostCount = currentCount;
}
}
}
std::cout << "most occurring values is" << mostChar << "with " << mostCount << " times!" << endl;
结果似乎很奇怪。我已经尝试了很多。不确定我的程序流程是否有问题。我习惯做这样的事情,有效:
sort(temp.begin(), temp.end());
int currentChar = temp[0];
int mostChar = temp[0];
int currentCount = 0;
int mostCount = 0;
for (int i =0; i <temp.size(); i++)
{
int c = temp[i];
if (c == currentChar)
currentCount++;
else
{
if (currentCount > mostCount)
{
mostChar = currentChar;
mostCount = currentCount;
}
currentChar = c;
currentCount = 1;
}
}
std::cout << "most occurring values is" << mostChar << "with " << mostCount << " times!" << endl;
现在没有sort函数和使用for循环,我的结果似乎很奇怪。任何的想法?我试过了:
if (c == currentChar)
currentCount++;
else
{
if ( currentCount > mostCount)
{
mostChar = currentChar;
mostCount = currentCount;
}
currentChar = c;
currentCount = 1;
}
}
在for循环方法中,并且在这里和那里不断变化,但结果似乎仍然很奇怪。任何的想法。自从我玩编程以来已经有一段时间了,并且因为被困在这么简单的事情而感到尴尬,但我想改进!所以请帮忙。流程出了什么问题?
编辑:尝试使用运算符,但结果似乎仍然不正确。
我的运营商代码:
struct //Compare : public std::binary_function<cv::Vec3b,cv::Vec3b,bool>
{
bool operator()(cv::Vec3b &a, cv::Vec3b &b)
{
return std::tie(a[0], a[1], a[2]) < std::tie(b[0], b[1], b[2]);
}
}inOrder;
我用它作为sort函数的参数。
sort(temp.begin(), temp.end(),inOrder);
然而,结果仍然不可取,或者说似乎不对。我是否错误地声明了操作员?我从自定义函数对象下的http://en.cppreference.com/w/cpp/algorithm/sort得到了这个想法。
答案 0 :(得分:1)
您的mostChar
和mostCount
会在每次重复时重置,因此mostChar
将始终是最后一个元素。
移动
mostChar = temp[z]; // replace by temp[0]
mostCount = 0;
在循环之外。