使用std :: sort()对对象矢量进行排序

时间:2014-01-12 16:49:42

标签: c++ sorting vector stl

我有以下结构:

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是一个自定义的int数组,它基于Boost库中的数组。

我有一个这个对象的stl Vector,我想根据它们的Coefficients矢量元素的数量对它们进行排序。所以我定义:

bool compInv(const Invariant &one, const Invariant &two)
{
    return (one.Coefficients.size() < two.Coefficients.size());
}

使用std::sort()std::stable_sort()对Vector进行排序。之后检查,Vector被排序,但似乎std::vector<intVec> Powers的内容已更改。此外,std::sort()std::stable_sort()似乎以不同的方式改变它们。可能导致这种情况的原因是什么?

编辑:IntVec的定义:

typedef blitz::Array<int,1> intVec;

我使用它是因为它们比常规数组更容易初始化,这非常重要,因为我必须创建很多这些对象,每个对象都包含很多这些向量。

1 个答案:

答案 0 :(得分:2)

如果没有SSCCE,很难说你的代码出了什么问题,但看起来你已经被一个过时的库(blitz ++)中的一个类抓住了,这个类似乎已经停止了几年的进一步开发/更新/调试前。

由于blitz::Array<int,1>是一个动态分配的1D整数数组,因此当你获得完全支持(正确交换)和C ++ 11特性时,没有优于使用std::vector<int>的优势。语义)。所以,首先要尝试的是

typedef std::vector<int> intVec;

并查看症状是否仍然存在。如果这对您的代码进行了太多更改,请首先使用SSCCE(最初必须显示与您的代码相同的症状)尝试此操作。