C++ 按参数对向量排序

C++ 按参数对向量排序,c++,stl,C++,Stl,大家好,我想做以下事情。 假设我们有一个向量[1 9 6 8 9 10],我想第一次按标准排序,第二次按其他标准排序。例如,如果bool变量为True,则使用第一个标准对向量排序,如果为false,则使用第二个标准对向量排序。 例如,让我们按照第一个条件对向量排序:升序 第二个标准:降序。 输出将为[110689]。 使用第一个标准,然后使用第二个标准对向量进行排序很容易,但是否可以使用stl库进行排序 std::sort的相关重载是三元的: template< class RandomI

大家好,我想做以下事情。 假设我们有一个向量[1 9 6 8 9 10],我想第一次按标准排序,第二次按其他标准排序。例如,如果bool变量为True,则使用第一个标准对向量排序,如果为false,则使用第二个标准对向量排序。 例如,让我们按照第一个条件对向量排序:升序 第二个标准:降序。 输出将为[110689]。 使用第一个标准,然后使用第二个标准对向量进行排序很容易,但是否可以使用stl库进行排序

std::sort的相关重载是三元的:

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
假设第一个和第二个是匹配类型,所以第三个参数编译


如果不是,您可以将它们包装在std::functions或其他东西中。

std::sort with custom functor?此外,我还建议您阅读相关内容。在询问向量排序之前,请先使用搜索引擎,这至少会让您有一个开始。如果您遇到如何使用自定义比较器的问题,您仍然可以在这里技术性地询问:比较器不必是一个函数。可以实现一个类,该类包含比较机制,并根据一些内部标志的值进行选择。它所需要的只是提供操作符,而std::function是STL中针对这种情况发现的最简单的单态包装器。当然,它是最简单的。但我留下这样评论的原因是:若你们用一个类的实例作为函子,你们可以避免做因子吗?首先:在每次std::sort调用时都是第二次,相反,您可以只设置必要的标志,而将其他一切留给functor的内部实现。嗯,内部包含的比较机制以及根据一些内部标志的值选择的比较机制在最佳情况下意味着每个元素都有一个分支,不是吗?每次排序节省一个分支的代价太大了:-|
std::sort(vector.begin(), vector.end(), factor? first : second);