2013-08-07 45 views
0

我的C++標準文檔副本文檔標準排序功能。C++標準排序文檔問題

25.4.1.1排序

template<class RandomAccessIterator> 
void sort(RandomAccessIterator first, RandomAccessIterator last); 
... 
Effects: Sorts the elements in the range [first,last). 

需要:RandomAccessIterator的應滿足 ValueSwappable(17.6.3.2)的要求。該類型的*首先應滿足MoveConstructible(表20)的 要求和MoveAssignable

確定 - 但應該不是也需要的元素中也具有可比性?

我期望的「要求」的條款,包括像:

「從提領該RandomAccessIterator應滿足的LessThanComparable要求的結果類型。」

或者更好的

iterator_traits<RandomAccessIterator>::value_type應滿足小於關係的要求。」

因爲24.4.1部分說,「這是必需的,如果Iterator是一個迭代的類型,類型... iterator_traits<Iterator>::value_type定義」

爲什麼不包含這樣的語言。當然,排序功能不能對無法比較的元素進行排序。

+3

這不是涵蓋[alg.sorting]/1-4嗎? – dyp

+0

@TonyTheLion「上述規則意味着RandomAccessIterator也實現'LessThanComparable'。」看起來像。 – JAB

+2

@TonyTheLion @JAB比較* iterators *與比較'* i'類型的對象不同,其中'i'是一個迭代器。 – dyp

回答

4
  • 好的 - 但不應該也要求所提到的元素也是可比的嗎?

如果您在上面的標準,你會發現對排序算法這些要求(根據§25.4)向上滾動:

所有在25.4操作有兩個版本:一個需要 比較類型的函數對象,以及使用運算符<的函數對象。這意味着它是在該類型的標準已經執行

到需要使用operator<自定義比較。

自定義比較器具有以下要求:

Compare是一個功能對象類型(20.8)。如果調用的第一個參數 小於第二個參數,則 上下文轉換爲bool(4)時,應用於類型爲Compare的對象的 函數調用操作的返回值爲true,否則爲false。 Compare comp 全部用於假設排序關係的算法。假設comp不會通過 解除引用的迭代器應用任何非常量函數。