使用 std::sort() 对对象的向量进行排序
Sorting a vector of objects with std::sort()
我有以下结构:
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 向量,我想按它们的系数向量的元素数量对它们进行排序。所以我定义:
bool compInv(const Invariant &one, const Invariant &two)
{
return (one.Coefficients.size() < two.Coefficients.size());
}
并使用std::sort()
或std::stable_sort()
对 Vector 进行排序。事后检查,矢量已排序,但似乎std::vector<intVec>
Power的内容已更改。此外,std::sort()
和std::stable_sort()
似乎以不同的方式改变了它们。可能是什么原因造成的?
编辑:IntVec的定义:
typedef blitz::Array<int,1> intVec;
我之所以使用,是因为它们比常规数组更容易初始化,这非常重要,因为我必须创建很多这些对象,每个对象都包含很多这些向量。
如果没有SSCCE,很难说出你的代码出了什么问题,但看起来你被一个过时的库(blitz++)中的类抓住了,这个库似乎在几年前就停止了进一步的开发/更新/调试。
由于blitz::Array<int,1>
是一个动态分配的整数一维数组,因此当您获得完全支持(正确的交换)和C++11功能(移动语义)时,与谨慎使用std::vector<int>
相比没有任何优势。所以,首先要尝试的是
typedef std::vector<int> intVec;
并查看症状是否持续。如果这涉及对代码进行太多更改,请先使用 SSCCE 尝试此操作(最初必须显示与代码相同的症状)。
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序