STL中“大”、“小”和“相等”的概念
STL 中關(guān)聯(lián)容器內(nèi)部的元素是排序的。STL 中的許多算法也涉及排序、查找。這些容器和算法都需要對(duì)元素進(jìn)行比較,有的比較是否相等,有的比較元素大小。
在 STL 中,默認(rèn)情況下,比較大小是通過(guò)<運(yùn)算符進(jìn)行的,和>運(yùn)算符無(wú)關(guān)。在STL中提到“大”、“小”的概念時(shí),以下三個(gè)說(shuō)法是等價(jià)的:
x 比 y 小。表達(dá)式x<y為真。y 比 x 大。注意:y比x大意味著x<y為真,而不是y>x為真。y>x的結(jié)果如何并不重要,甚至y>x是沒(méi)定義的都沒(méi)有關(guān)系。
在 STL 中,x和y相等也往往不等價(jià)于xy為真。對(duì)于在未排序的區(qū)間上進(jìn)行的算法,如順序查找算法 find,查找過(guò)程中比較兩個(gè)元素是否相等用的是運(yùn)算符;但是對(duì)于在排好序的區(qū)間上進(jìn)行查找、合并等操作的算法來(lái)說(shuō),x和y相等是與x<y和y<x同時(shí)為假等價(jià)的,與運(yùn)算符無(wú)關(guān)。看上去x<y和y<x同時(shí)為假就應(yīng)該和xy為真等價(jià),其實(shí)不然。例如下面的 class A:
class A {int v; public:bool operator< (const A & a)const {return false;} };可以看到,對(duì)任意兩個(gè)類(lèi) A 的對(duì)象 x、y,x<y和y<x都是為假的。也就是說(shuō),對(duì) STL 的關(guān)聯(lián)容器和許多算法來(lái)說(shuō),任意兩個(gè)類(lèi) A 的對(duì)象都是相等的,這與==運(yùn)算符的行為無(wú)關(guān)。
使用 STL 中的關(guān)聯(lián)容器和許多算法時(shí),往往需要對(duì)<運(yùn)算符進(jìn)行適當(dāng)?shù)闹剌d,使得這些容器和算法可以用<運(yùn)算符對(duì)所操作的元素進(jìn)行比較。最好將<運(yùn)算符重載為全局函數(shù),因?yàn)樵谥剌d為成員函數(shù)時(shí),在有些編譯器上會(huì)出錯(cuò)(由其 STL 源代碼的寫(xiě)法導(dǎo)致)。
總結(jié)
以上是生活随笔為你收集整理的STL中“大”、“小”和“相等”的概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 在指定目录中查找文件
- 下一篇: 数组交集