我希望使用
执行策略似乎是可以修改算法的参数,但它似乎只能改变并行性的范围。 http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t 虽然选择并行或顺序版本实际上可能选择O(N·log(N))或O(N·log^2(N))版本,但网页上没有说明。
我想知道是否有人有选择的经验。如果有,他们能提供任何建议吗?
std::stable_sort
。该算法的复杂度为O(N·log^2(N)),其中N=std::distance(first,last)应用了cmp。如果有额外的内存可用,则复杂度为O(N·log(N))。http://en.cppreference.com/w/cpp/algorithm/stable_sort
在我的应用程序中,内存很重要,因此我希望std::stable_sort
使用内存优化的O(N·log^2(N))算法,而不是时间优化的O(N·log(N))算法。
我知道只有当安全时(有足够的内存)才会选择时间优化版本。但是,我想对我的应用程序进行基准测试,并且由于内存很重要,所以想在内存消耗最低时对算法进行基准测试。由于我的系统当前有足够的内存来分配缓冲区,因此它将自动选择std::stable_sort
的O(N·log^2(N))版本。因此,我想断言std::stable_sort
选择内存优化的版本。这可能吗?执行策略似乎是可以修改算法的参数,但它似乎只能改变并行性的范围。 http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t 虽然选择并行或顺序版本实际上可能选择O(N·log(N))或O(N·log^2(N))版本,但网页上没有说明。
我想知道是否有人有选择的经验。如果有,他们能提供任何建议吗?
std::stable_sort
不使用内存是不可能的)代替它。它的默认C++实现可以在没有额外内存的情况下进行原地稳定排序,具有相当高的性能。如果你对内存有一定的控制权,还可以强制它使用固定大小的缓冲区,在避免动态内存分配的同时提高了性能。此外,flat_stable_sort
也符合您的要求,并且可能会在某个时候被包含在Boost中。 - Morwenn