謂詞是一個(gè)可調(diào)用的表達(dá)式,其返回結(jié)果是一個(gè)能用作條件的值邮屁。標(biāo)準(zhǔn)庫算法所使用的謂詞分為兩類:一元謂詞(unary predicate彩郊,只接受單一參數(shù))和二元謂詞(binary predicate矫废,接受兩個(gè)參數(shù))岂膳。接受謂詞參數(shù)的算法對(duì)輸入序列中的元素調(diào)用謂詞。因此芥丧,元素類型必須能轉(zhuǎn)換為謂詞的參數(shù)類型紧阔。
接受一個(gè)二元謂詞參數(shù)的sort版本用這個(gè)謂詞代替<來比較元素。我們提供給sort的謂詞必須滿足以下條件:
- 所提供的操作必須在關(guān)鍵字類型上定義一個(gè)嚴(yán)格弱序(strict weak ordering)续担,可以將嚴(yán)格弱序看作"小于等于擅耽,雖然實(shí)際上定義的操作可能是一個(gè)復(fù)雜的函數(shù)。
- 兩個(gè)關(guān)鍵字不能同時(shí)"小于等于"對(duì)方物遇;如果k1"小于等于"k2乖仇,那么k2絕不能"小于等于"k1。
- 如果k1"小于等于"k2询兴,且k2"小于等于"k3乃沙,那么k1必須"小于等于"k3。
- 如果存在兩個(gè)關(guān)鍵字诗舰,任何一個(gè)都不"小于等于"另一個(gè)警儒,那么我們稱這兩個(gè)關(guān)鍵字是"等價(jià)"的。如果k1"等價(jià)于"k2,且k2"等價(jià)于"k3蜀铲,那么k1必須"等價(jià)于"k3边琉。
下面定義的isShorter就是一個(gè)滿足這些要求的函數(shù),因此可以將isShorter傳遞給short记劝。這樣做會(huì)將元素按大小重新排序变姨。
//比較函數(shù),用來按長度排序單詞
bool isShorter(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}
//按長度由短至長排序words
sort(words.begin(), words.end(), isShorter);