STL中“大”、“小”和“相等”的概念
生活随笔
收集整理的這篇文章主要介紹了
STL中“大”、“小”和“相等”的概念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
STL 中關聯容器內部的元素是排序的。STL 中的許多算法也涉及排序、查找。這些容器和算法都需要對元素進行比較,有的比較是否相等,有的比較元素大小。
在 STL 中,默認情況下,比較大小是通過<運算符進行的,和>運算符無關。在STL中提到“大”、“小”的概念時,以下三個說法是等價的:
x 比 y 小。表達式x<y為真。y 比 x 大。注意:y比x大意味著x<y為真,而不是y>x為真。y>x的結果如何并不重要,甚至y>x是沒定義的都沒有關系。
在 STL 中,x和y相等也往往不等價于xy為真。對于在未排序的區間上進行的算法,如順序查找算法 find,查找過程中比較兩個元素是否相等用的是運算符;但是對于在排好序的區間上進行查找、合并等操作的算法來說,x和y相等是與x<y和y<x同時為假等價的,與運算符無關??瓷先<y和y<x同時為假就應該和xy為真等價,其實不然。例如下面的 class A:
class A {int v; public:bool operator< (const A & a)const {return false;} };可以看到,對任意兩個類 A 的對象 x、y,x<y和y<x都是為假的。也就是說,對 STL 的關聯容器和許多算法來說,任意兩個類 A 的對象都是相等的,這與==運算符的行為無關。
使用 STL 中的關聯容器和許多算法時,往往需要對<運算符進行適當的重載,使得這些容器和算法可以用<運算符對所操作的元素進行比較。最好將<運算符重載為全局函數,因為在重載為成員函數時,在有些編譯器上會出錯(由其 STL 源代碼的寫法導致)。
總結
以上是生活随笔為你收集整理的STL中“大”、“小”和“相等”的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 在指定目录中查找文件
- 下一篇: 数组交集