c++ - std::sort vector 的 vector

标签 c++ sorting vector std

我实际上是在尝试根据描述符中包含的 vector 对描述符 vector 进行排序

float           xi, yi;     // Descriptor location
vector<double>  fv;         // The feature vector

(这里是名为 fv 的 vector ) 我想要做的是在 Descriptor 的 vector 中搜索(为了更清楚起见,我将其命名为 Vec_Desc )具有最大方差的维度 为此,我使用:

double Tree::_get_mean(vector<Descriptor>& vec, int indice)
{
    double sum = 0;
    int size = vec.size();
    for (int i = 0; i < size; i++) {
        sum += vec[i].fv[indice];
    }
    sum /= size;
    return sum;
}

double Tree::_get_variance(vector<Descriptor>& vec, int indice)
{
int size = vec.size();
double var = 0;
double mean = _get_mean(vec, indice);
    for (int i = 0; i < size; i++) {
        var += ((vec[i].fv[indice] - mean) *  (vec[i].fv[indice] - mean)) / size;
    }
    return var;
}

int Tree::choose_dimension(vector<Descriptor>& vec)
{
    double var = _get_variance(vec, 0);
    int indice = 0;
    for (int i = 1; i < vec[0].fv.size(); i++) {
         if (var > _get_variance(vec, i)) {
            var = _get_variance(vec, i);
            indice = i;
        }
    }
}

然后我想根据我找到的 dim 对 vec_desc 进行排序。 试图这样做:

class _compare {
    int step;
public: 
     _compare(int s) : step(s) {}

    bool operator()(const vector<double>& p1, const vector<double>& p2) {
        return p1[step] < p2[step];
    }
};

void Tree::_sort_vector(vector<Descriptor>& vec, int i)
{
    std::sort(vec.begin(), vec.end(), _compare(i));
}

void Tree::sort_vector(vector<Descriptor>& vec)
{
    _sort_vector(vec, choose_dimension(vec));
}

但是有了这个,我将使用他自己的值对 vec_desc 进行排序,而不是 fv 中包含的值... 我该怎么做?

最佳答案

您的比较器不正确 - 因为您正在排序 vector<Descriptor>它必须比较 Descriptor 的两个实例不是 vector<double> :

class _compare {
    int step;
public: 
     _compare(int s) : step(s) {}

    bool operator()(const Descriptor& d1, const Descriptor& d2) const {
        return d1.fv[step] < d2.fv[step];
    }
};

关于c++ - std::sort vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35607233/

相关文章:

r - R中数字信号处理的卷积

c++ - 如何正确使用 vector 范围构造函数?

php - 搜索矩阵寻路算法

c++ - 顶点定义框算法中的点?

c++ - 如何在 iOS 中使用 Opencv 检测嘴唇边缘?

c++ - sqlite3_exec() 回调函数说明

c++ - 宏观评估顺序

javascript - 通过在 javascript/jquery 中对 arraylist 进行排序来对 json 进行排序

javascript - 数组排序日期未按预期工作

algorithm - 对于给定的图 G = (V,E),如何在 O(E+V) 时间内对它的邻接表表示进行排序?