我有以下結構:排序性病對象的矢量::排序()
struct Invariant
{
public:
Invariant(int d, int dc)
: Dim(d), DimCoupl(dc) {}
void addTerm(int coeff, intVec pows)
{
Powers.push_back(pows);
Coefficients.push_back(coeff);
}
int Dim, DimCoupl;
std::vector<long> Coefficients;
std::vector<intVec> Powers;
};
哪裏IntVec
是,是基於從Boost庫陣列INTS的自定義數組。
我有一個stl這些對象的向量,我想按它們的Coefficients向量的元素數量排序它們。所以我定義:
bool compInv(const Invariant &one, const Invariant &two)
{
return (one.Coefficients.size() < two.Coefficients.size());
}
並使用std::sort()
或std::stable_sort()
排序的矢量。之後檢查矢量是否排序,但好像std::vector<intVec>
的內容更改了權力。此外,std::sort()
和std::stable_sort()
似乎以不同的方式改變它們。什麼可能導致這個?
編輯:INTVEC的定義:
typedef blitz::Array<int,1> intVec;
我用,因爲它們更容易初始化,比普通陣列,這是非常重要的,因爲我創造了很多這些對象,每包含的很多這些載體。
需要更多的SSCCE。 –
如果發生這種情況,那麼你的'intVec'類(特別是它的'swap'或賦值操作符)被破壞。你爲什麼要自己動手? – jalf
我以爲'std :: sort'使用'std :: swap'。這可能是交換你的IntVec沒有做你認爲的事情(即你的IntVec類被破壞了)。 – Walter