c++ - std::sort 具有多个属性的相等对象

标签 c++ sorting std

我正在尝试对对象 vector 进行排序,使具有相同属性的对象彼此相邻。 Task 是一个类,它接受并保存 3 个指向某处数据的指针。

vec.push_back(Task(&propertyOne, &propertyTwo, &propertyThree));

如果我有一个充满这些的 vector ,我想对它们进行排序,以便任何具有相等 propertyOnepropertyTwopropertyThree 在 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/

相关文章:

c++ - 具有取决于其他对象的参数的谷歌模拟类构造函数

c - 在 C 中使用快速排序反向排序(降序)?

c - 从标准 C 中的字符串中删除字符

c++ - 使用 const_iterator 时的断言

c# - 在从托管 C# 应用程序调用非托管 C++ Dll 时,如何处理数据类型之间的冲突

c++ - 空的大小是多少?

c++ - Visual Studio 2015 中的错误 C2784、C2672 和 C2664

Python自定义排序

php - 使用 php 数组中的键对 div 显示顺序进行排序和更改

c++ - 在什么意义上 std::disjunction 在 compile_time 短路