如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?

Posted

技术标签:

【中文标题】如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?【英文标题】:How can I use std::sort() with std::unique_ptr<[]>? 【发布时间】:2021-03-11 15:59:16 【问题描述】:
std::unique_ptr<type[]> D std::make_unique<type[]>(10'000) ;

std::sort(D2[0], D2[10'000], [](auto& a, auto& b)->bool return a < b; ); //error

我使用std::unique_ptr&lt;[]&gt; 来读取二进制文件。 如果我想对这些数据进行排序,我是否必须制作另一个向量或其他东西? 我不知道如何使用sort func 和unique_ptr&lt;[]&gt;。你能告诉我路吗?

【问题讨论】:

请原谅我的好奇,但为什么是std::unique_ptr&lt;type[]&gt; 而不是std::vector&lt;type&gt; 或者可能是std::array&lt;type, 10'000&gt; std::sort(&amp;D2[0], &amp;D2[10'000], ...) @Someprogrammerdude 不是 OP,但 std::vector&lt;type&gt; 可以调整大小,D 不能。它没有相关接口或跟踪大小或容量的负担。 std::array&lt;type,10000&gt; 需要 constexpr 大小,但 D 不需要。 @FrançoisAndrieux 更重要的是,向量可能会被意外复制。 @n.'pronouns'm。 operator[] 在调试模式下的某些实现下触发结束迭代器的断言。对于std::vector,它肯定在 Visual Studio 中起作用 【参考方案1】:

您可以将指针用作排序例程的迭代器:

std::sort(D.get(), D.get() + 10'000);

【讨论】:

【参考方案2】:

您知道吗,在 C++11 及更高版本中,迭代器标头为内置数组类型提供了 begin() 和 end() 函数,这些函数返回指向数组的第一个元素和一个结束元素的指针?

【讨论】:

以上是关于如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

混淆使用 std::less 和 std::greater 与 std::sort

std::sort 使用继承的仿函数

std::sort 如何修改后备类型?

如何使用单独类的属性对向量进行 std::sort [关闭]

如何在 CvPoint 和 int 的结构上应用 std::sort 和 std::erase?

如何使用 std::sort() 对指向值的向量进行排序?