我正在实现一个功能,这里是RME:
//EFFECTS: returns a summary of the dataset as (value, frequency) pairs
// In the returned vector-of-vectors, the inner vector is a (value,frequency) pair. The outer vector contains many of these pairs. The pairs should be
// sorted by value.
// {
// {1, 2},
// {2, 3},
// {17, 1}
// }
//
// This means that the value 1 occurred twice, the value 2 occurred 3 times,
// and the value 17 occurred once
std::vector<std::vector<double> > summarize(std::vector<double> v);
上面的代码是我正在实现的功能。 我该如何处理?
按方式,有一个可用的排序功能,我将用它来排序数字,所以忽略那个部分。
我为一对(double(double),int(freq))创建了一个新的向量,然后做了一个for循环来将值放入其中。但后来试图返回它,但它说它无法将我的向量转换为该函数应该返回的类型。
答案 0 :(得分:1)
我建议您保持数据结构与您尝试表示的数据相关。你在问题中已经多次使用过单词对,这对于成对的尖叫。你可以使用像对象的矢量:
std::vector<std::pair<double,int>> summarize
或者甚至更好,如果您有唯一值,请使用地图:
std::map<double,int> freqMap
答案 1 :(得分:0)
这是一些伪代码:
sorted_vector = sort(input_vector);
current_value = sorted_vector[0];
count = 0;
for each element in sorted_vector:
if element == current_value:
count = count + 1;
else:
output_vector.push_back(current_value, count);
current_value = element;
count = 1;
// push final pair
output_vector.push_back(current_value, count);
答案 2 :(得分:0)
返回类型应为地图,将每个double
映射到其频率。
现代:
std::map<double, int>summarize(std::vector<double> v)
{
std::map<double, int> ret;
for (auto& i : v)
++ret[i];
return ret;
}
预C ++ 11:
std::map<double, int>summarize(std::vector<double> v)
{
std::map<double, int> ret;
for (std::map<double,int>::iterator it = v.begin();
it != v.end(); ++it)
++ret[*it];
return ret;
}
如果你真的必须返回一个向量向量,请使用上面的敏感summarize
函数并编写一个包装器,通过遍历映射将返回类型混合到向量向量。