[英]std::sort on vector of vector
我實際上正在嘗試根據描述符中包含的向量對描述符向量進行排序
float xi, yi; // Descriptor location
vector<double> fv; // The feature vector
(這里名為fv的向量)我想做的是在Descriptor的向量中搜索(為了更清晰起見,我將其命名為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;
}
}
}
然后我想根據我發現的昏暗來對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));
}
但是有了這個,我將使用他自己的值而不是fv中包含的值對vec_desc進行排序。我該怎么做?
您的比較器不正確-由於您要對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];
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.