c++ - 使用 std::sort() 对对象 vector 进行排序

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

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

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> 的内容权力被改变了。此外,std::sort()std::stable_sort()似乎以不同的方式改变它们。可能是什么原因造成的?

编辑:IntVec 的定义:

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

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

最佳答案

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

blitz::Array<int,1>是一个动态分配的一维整数数组,与谨慎使用 std::vector<int> 相比没有优势相反,当您获得完全支持(正确的交换)和 C++11 功能(移动语义)时。所以,首先要尝试的是

typedef std::vector<int> intVec;

看看症状是否持续。如果这涉及对您的代码进行太多更改,请先使用 SSCCE 尝试此操作(它最初必须显示与您的代码相同的症状)。

关于c++ - 使用 std::sort() 对对象 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077396/

相关文章:

C++ 设置 MIL 问题

python 相当于 perl 按哈希值排序

javascript - 对具有相同字符串的一个字符和数字以及日期逻辑进行排序

c++ - 插入从函数返回的 std::vector

C++错误的构造函数被调用

c++ - 使用 vector 作为堆栈的容器适配器时出错

java - 如何打乱列表?

python - 在 python 中索引向量列表

c++ - 如何将 std::sort 与结构 vector 和比较函数一起使用?

C++ const 成员函数正在修改成员变量