在当时(有些人可能会经常争辩),人们需要按照人类对事物排序的方式(字母顺序,而不是ASCIIbetically)进行排序,但据我所知,在C++中没有方便的方法(我甚至不知道boost解决方案),人们不得不自己动手。这在C++11或以后的版本中被纠正了吗?
是否有c++标准(从c++11开始)中包含的谓词或算法允许像人类一样进行排序?
也就是说,对string的排序为"z1,z2,z3“,而不是"z1,z10,z100,z2,z20,z3”等。
如果不是,是否有什么逻辑上的原因让我忽略了它们不包括这个功能呢?
发布于 2015-05-28 23:40:01
的答案是:不,没有这样的事情。有一种比较字符串operator<的标准方法。std::less也默认为.它是基于lexicographical compare的。而且,按照“正常”的方式,我会理解std::sort (1),所以这就是它。
有点挑剔:,我不认为你的概念是字母排序,它不能在字符级别上进行比较。“字母”而不是"ASCIIbetical“更像是字母的不同顺序。
您的概念更像是字母数字,它需要解释字符串,并将数字作为一个原子单位进行比较。这需要一些解析逻辑。
一种观点:,我相信没有一件事是每个人都会用同样的方式做的。这可能有点极端,但即使对于常识的例子,也会有歧义。让我们以大多数gnu中包含的示例和标准sort程序为例。它有一个用于human的开关human,它执行您所描述的操作,但是它也检查数字的后缀,因此2K比2G小。现在还不清楚该选择哪种选择。在此之后,会有一个问题,小数如何?诸若此类。
要正确地做到这一点,它将需要相当复杂的架构和逻辑,和/或作出非显而易见的设计选择。
https://stackoverflow.com/questions/30518545
复制相似问题