我正在尝试对对象 vector 进行排序,使具有相同属性的对象彼此相邻。 Task
是一个类,它接受并保存 3 个指向某处数据的指针。
vec.push_back(Task(&propertyOne, &propertyTwo, &propertyThree));
如果我有一个充满这些的 vector ,我想对它们进行排序,以便任何具有相等 propertyOne
、propertyTwo
和propertyThree
在 vector 中并排放置。如果两个 Task
对象属性不相等,那么它们去哪里并不重要。尽管他们最好靠近他们最共同的 Task
对象。
我该怎么做?我已经尝试了明显的方法(return a.propertyOne == b.propertyOne
),但这似乎根本不起作用,而且它只比较了第一个属性。
最佳答案
最好的解决方案是使用 tuple<property*, property*, property*>
不是Task
.这带有 comparison operators定义所以你可以简单地做:vec.push_back(make_tuple(&propertyOne, &propertyTwo, &propertyThree))
对于 vec
中的每个条目,然后进行排序:
sort(vec.begin(), vec.end())
如果Task
必须比 tuple<property*, property*, property*>
更详尽,您应该为 Task
定义比较运算符:
bool Task::operator< (const Task& rhs) {
return make_tuple(a, b, c) < make_tuple(rhs.a, rhs.b, rhs.c);
}
bool Task::operator== (const Task& rhs) {
return a == rhs.a && b == rhs.b && c == rhs.c;
}
一旦定义了这两个,您就可以再次执行:
sort(vec.begin(), vec.end())
关于c++ - std::sort 具有多个属性的相等对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819009/