在我得到我的公平份額「這是一個鏈接到線程的副本」的答覆,我想說我已經實現了我一直在閱讀StackOverflow和在CPlusPlus網站。問題是我的矢量不會排序。我在執行過程中必須缺少一些東西。也許錯誤地使用引用等排序向量類
這裏有:我有兩個類 - DETargetParam和一個名爲DETargetParamVector的包裝類,它包含一個類型爲DETargetParam的STL向量。我的目標是使用DETargetParam的fitness成員變量以升序排列std :: vector。我試圖通過重載DETargetParam類中的less運算符並返回一個布爾結果來實現這一點。
但是,這並沒有排序。一切都完美地編譯和執行,但沒有任何排序。我真的希望這裏有人能幫助我。
這是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;
}
預先感謝。
我看到一個'SortVector'方法,但我看不到你在任何地方調用它。 – 2012-03-22 12:58:10
我初始化了一個DETargetParamVector變量並在主方法中調用了SortAndCalculate()。 – sudosensei 2012-03-22 13:01:28
你的代碼實際上並沒有將任何東西放入向量中,所以沒有東西可以排序。如果補充說明,代碼應該可以工作。如果沒有,請創建一個完整的可編譯樣本,其中包含您描述的問題。 – 2012-03-22 13:15:06