c++ - 排序和排序有什么区别?

标签 c++ data-structures tree

不,这不是类里面的问题,我正在自己研究树和堆(部分排序的二叉树),我想知道如何正确定义与通用数据结构相关的这 2 个属性/操作。

最佳答案

  • 排序”基本上是一组规则,用于确定哪些项目在哪些项目之前或之后,哪些其他项目。 IE:如果它们被排序,则相对顺序项目将出现。对于强制排序的集合,该排序通常根据比较运算符(特别是 < )、接口(interface)(类似于 Java 的 Comparable<T> )或比较回调和/或函数对象(如 C++ 的 std::less )来指定。

    还有一些集合被描述为“有序集合”。该词的用法略有不同,但含义相关。这意味着集合代表项目的序列,因此具有一些内在的顺序概念。 (与哈希表相比。您向哈希表添加一些内容,如果您遍历内容,您不知道它会出现在哪里。您知道,使用有序集合。)列表、 vector 、数组等是典型的有序集合。但是,对于非列表示例,PHP 的“数组”类型实际上是“有序映射”——保留键顺序的字典类型。当您遍历数组时,键会按照它们第一次插入的顺序(或您最后一次使用 ksort() 或类似名称放置它们的顺序)出现。

  • 排序”是根据给定顺序实际排列项目序列的过程。它通常只对有序集合完成......因为将一个项目放在另一个之前没有多大意义的容器中没有“之前”的概念,或者不会让你重新排列项目。 (像集合和堆这样的结构也可以使用排序,并且添加和删除条目会根据排序改变底层树。有人可能会争辩说它们是逐位“排序”的。但是这个词通常用于表示一个操作一次重新排列。)

关于c++ - 排序和排序有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239976/

相关文章:

c++ - 并非链接所需的所有组件都出现在命令行中

c++ - 覆盖 C++ 中的非虚继承

algorithm - 这棵树叫什么名字?

java - 查找树中所有叶子的位置(JAVA)

Android:从JNI方法获取随机数

c++ - 如何关闭使用 SHCreateStreamOnFile 打开的文件句柄

haskell - 在 Haskell 中从左到右对树中所有出现的叶子进行编号

java - 如何获取树表的选定行?

c++ - 在不使用临时变量进行交换时,swap(int&, int&) 函数不起作用?

c++ - 链表: Inserting a node at the end