Effective_STL 学习笔记(十九) 了解相等和等价的区别
?
find 算法和 set 的 insert 成員函數是很多必須判斷兩個值是否相同的函數代表,
find 對 “相同” 的定義是相等,基于 operator== ,
set::insert 對 “相同” 的定義是等價,通常基于 operator< 。
?
操作上來說,相等的概念基于 operator== 的,如果表達式 “x == y” 返回true,x和y有相等的值,
x 和 y 相等并不意味著所有它們的成員有相等的值
?
等價是基于在一個有序區間中對象值的相對位置。等價一般在每種關聯容器(set、multiset、map 和 multimap)的一部分——排序方面有意義,
兩個對象 x 和 y 如果在關聯容器 c 的排列順序中沒有哪個排在另一個之前,那么它們關于 c 使用的排列順序有等價的值
對于 set<Widget> 的默認比較函數是 less<Widget>,operator<
1 !( w1 < w2 ) && !( w2 < w1 ) // w1<w2非真且w2<w1非真意義在于: 兩個值沒有哪個在另一個之前(關于某個排序標準),那么它們等價
?
一般情況下,用于關聯容器的比較函數是用戶定義的判斷式每個關聯容器通過 key_comp成員函數來訪問排序判斷式:
1 !c.key_comp()(x, y) && !c.key_comp()(y, x);c.key_comp() 返回一個函數,并把 x 和 y 作為實參
?
總之,通過只定義一個比較函數并使用等價作為兩個值 “相等” 的意義的仲裁者,標準關聯容器避開了很多會由允許兩個比較函數而引發的困難。
?
轉載于:https://www.cnblogs.com/kidycharon/p/10019135.html
總結
以上是生活随笔為你收集整理的Effective_STL 学习笔记(十九) 了解相等和等价的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ad19原理图标注_AD19中原理图的模
- 下一篇: 基于结构体的二进制文件读写