对向量进行递归排序的最简单方法?

用户名

这将对向量内的向量进行排序:

std::vector<
    std::vector<int>
> my_vector {
    { 1, 3, 2 },
    { 52, 10, 20 },
    { 30, 2, 3 }
};
std::for_each(my_vector.begin(), my_vector.end(), [] (std::vector<int>& v)
    {
        std::sort(v.begin(), v.end());
    });

它实际上并不对最外层向量的元素进行排序,因此它不是“递归”排序。递归排序将对所有向量进行排序,包括最外面的向量。例如,prettyprint.hpp将递归打印容器。我不需要遍历每个容器的所有元素,就像prettyprinter一样,只需遍历范围。

到目前为止,这是我的尝试:

template <typename T>
void my_sort(std::vector<T>& v)
{
    std::sort(v.begin(), v.end());
    std::for_each(v.begin(), v.end(), 
        [] (T& vv)
        {
            my_sort(vv);
        });
}

这是行不通的,因为当T = int它尝试my_sort使用int进行调用时。有小费吗?

输出应如下所示:

[[1、2、3],[2、3、30],[10、20、52]]
^ ---最外层向量
 ^ ----内部向量
迪特玛·库尔(DietmarKühl)

首先,您应该先递归,然后再对外部范围进行排序。否则,您会得到一些随机的结果,因为内部容器不是按任何规范的顺序排列的。更糟的是,后面的排序将更改元素的顺序,从而导致外部矢量明显乱序。似乎您想要一个条件版本的my_sort()依赖项,取决于该类型是否T定义了关联的iterator类型。由于仅使用,因此std::vector<T>一种更简单的方法是仅依赖模板的部分排序,但是:

template <typename T>
void my_sort(T const&) {
    // this function delibarately does nothing
}
template <typename T>
void my_sort(std::vector<T>& v) {
    std::for_each(v.begin(), v.end(), [](T& value) { my_sort(value); });
    std:sort(v.begin(), v.end());
}

顺便说一句,由于此函数实际上从不直接或间接调用其自身,因此它实际上不是递归函数:函数模板的每个实例都是一个不同的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按属性对php数组进行排序的最简单方法

来自分类Dev

对Vector3的列表进行排序的最简单方法

来自分类Dev

按属性对php数组进行排序的最简单方法

来自分类Dev

使用StringComparison.Ordinal对字符串进行排序的最简单方法

来自分类Dev

进行并行复制的最简单方法

来自分类Dev

使用 Javascript + jQuery 进行 API 调用的最简单方法

来自分类Dev

Axon - 在查询时进行投影的最简单方法

来自分类Dev

在R中,将向量缩放为单位向量的最简单方法是什么?

来自分类Dev

jq:基于对象值条件递归删除对象的最简单方法

来自分类Dev

jq:基于对象值条件递归删除对象的最简单方法

来自分类Dev

用Python排序XML的最简单方法?[Skype机器人]

来自分类Dev

C#-按州然后按城市对数据排序的最简单方法

来自分类Dev

从UItableview按字母顺序对数据排序的最简单方法

来自分类Dev

在Groovy中实现单方法接口的最简单方法?

来自分类Dev

在Python中按列表对索引列表进行排序的更简单方法

来自分类Dev

实现此效果的最简单方法?

来自分类Dev

创建包装函数的最简单方法?

来自分类Dev

获得Clojurescript REPL的最简单方法

来自分类Dev

绘制SVG路径的最简单方法

来自分类Dev

捕获JS错误的最简单方法

来自分类Dev

创建jar文件的最简单方法?

来自分类Dev

托管HTML的最简单方法

来自分类Dev

发布AAR的最简单方法

来自分类Dev

PyQT线程化的最简单方法

来自分类Dev

解析JSON响应的最简单方法

来自分类Dev

检查大写的最简单方法

来自分类Dev

编写此逻辑的最简单方法

来自分类Dev

备份VPS的最简单方法

来自分类Dev

从HSQLDB获取架构的最简单方法

Related 相关文章

热门标签

归档