gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:22:41 27 4
gpt4 key购买 nike

我正在尝试对对象 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com