C ++向量和对

时间:2016-01-11 20:17:30

标签: c++ vector

我正在实现一个功能,这里是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循环来将值放入其中。但后来试图返回它,但它说它无法将我的向量转换为该函数应该返回的类型。

3 个答案:

答案 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函数并编写一个包装器,通过遍历映射将返回类型混合到向量向量。