Прежде чем я получу свою справедливую долю ответов «это дубликат ссылки на поток», я хотел бы сказать, что я реализовал то, что читал в StackOverflow и на веб-сайте CPlusPlus. Проблема в том, что мой вектор не сортируется. Я должен что-то упустить в реализации. Возможно неправильное использование ссылок и т. Д.
Здесь идет речь: у меня есть два класса - DETargetParam и класс-оболочка с именем DETargetParamVector, который включает вектор STL типа DETargetParam. Моя цель - отсортировать std :: vector в порядке возрастания, используя переменную-член пригодности DETargetParam. Я попытался сделать это, перегрузив оператор less в классе DETargetParam и вернув логический результат.
Это, однако, не сортирует. Все компилируется и выполняется отлично, но нет никакой сортировки. Я действительно надеюсь, что кто-то здесь может мне помочь.
Это исходный код для DETargetParam:
#ifndef _DE_TARGET_PARAM_H_DP_
#define _DE_TARGET_PARAM_H_DP_
template <typename T, unsigned int N>
class DETargetParam {
private:
/** The array of N parameters in type T */
T param[N];
long double fitness;
long double probability;
long double probabilityInterval;
public:
/**
* @brief Default constructor.
*
* Nada!
*/
DETargetParam() {
/* NULL */
}
long double getFitness() {
return fitness;
}
void setFitness(long double x) {
fitness = x;
}
long double getProbability() {
return probability;
}
void setProbability(long double x) {
probability = x;
}
long double getProbabilityInterval() {
return probabilityInterval;
}
void setProbabilityInterval(long double x) {
probabilityInterval = x;
}
bool operator<(const DETargetParam& rhs) const {
return (fitness < rhs.fitness);
}
T& operator[](unsigned int i) {
return param[i];
}
};
#endif // _DE_TARGET_PARAM_H_DP_
и класс-оболочка DETargetParamVector:
#ifndef _DE_TARGET_PARAM_VECTOR_H_DP_
#define _DE_TARGET_PARAM_VECTOR_H_DP_
#include <algorithm>
#include <cstdio>
#include <vector>
#include "DETargetParam.h"
template <typename T, unsigned int N, unsigned int NP>
class DETargetParamVector {
private:
/** This is a STL vector holding the parameters */
std::vector< DETargetParam<T, N> > vec;
public:
/**
* @brief Default constructor
*
* Move along... nothing to see here.
*/
DETargetParamVector() {
vec.reserve(NP);
}
void SortAndCalculate() {
SortVector();
PrintSorted();
}
void SortVector() {
std::sort(vec.begin(), vec.end());
}
void PrintSorted() {
for (unsigned int i = 0; i < NP; ++i) {
fprintf(stdout, "%.12Lf, %.12Lf, %.12Lf\n", vec[i].getFitness(), vec[i].getProbability(), vec[i].getProbabilityInterval());
}
fprintf(stdout, "\n");
fflush(stdout);
}
DETargetParam<T, N>& operator[](unsigned int i) {
return vec[i];
}
};
#endif // _DE_TARGET_PARAM_VECTOR_H_DP_
и основные сведения о функции:
#include <cmath>
#include <ctime>
#include "DETargetParamVector.h"
const unsigned int N = 10;
const unsigned int NP = 10;
int main() {
srand(time(0));
DETargetParamVector<long double, N, NP> targetVector;
// For each member of the population.
for (unsigned int i = 0; i < NP; ++i) {
targetVector[i].setFitness(static_cast<long double>(rand()));
}
targetVector.SortAndCalculate();
return 0;
}
Заранее спасибо.