C ++ set key_comp()函數(shù)用于返回比較對象的副本,該對象由set容器用于比較鍵。
比較對象可用于比較容器中兩個(gè)元素的鍵值。這個(gè)比較對象是在構(gòu)造對象時(shí)給出的,它可以是一個(gè)指向函數(shù)的指針,也可以是一個(gè)函數(shù)對象。在這兩種情況下,它都接受相同類型的兩個(gè)參數(shù),如果第一個(gè)參數(shù)在第二個(gè)參數(shù)之前,則返回true,否則返回false。
Key_compare key_comp() const;
operator bool ( const Key & _Left , const Key & _Right );
如果_Left在前面且排序順序不等于_Right,則返回true。
沒有
它返回鍵比較功能對象。
不變。
沒有變化。
容器被訪問。
不能訪問任何包含的元素:同時(shí)訪問和修改元素是安全的。
如果引發(fā)異常,則容器中沒有任何更改。
讓我們看一下比較鍵值的簡單示例:
#include <iostream> #include <set> using namespace std; int main () { set < int > m ; set < int > :: key_compare comp = m . key_comp () ; cout <<"比較鍵(1為真,0為假): "<< comp ( 1 , 5 ) <<endl ; cout <<"比較鍵(1為真,0為假): "<< comp ( 3 , 2 ) <<endl ; }
輸出:
比較鍵(1為真,0為假): 1 比較鍵(1為真,0為假): 0
在上面的示例中,comp(1,5)返回true,因?yàn)?小于5。comp(3,2)返回false,因?yàn)?大于2。
讓我們看一個(gè)簡單的實(shí)例:
#include <iostream> #include <set> using namespace std; int main () { set<int> myset; int highest; set<int>::key_compare mycomp = myset.key_comp(); for (int i=0; i<=5; i++) myset.insert(i); cout << "myset包含:"; highest=*myset.rbegin(); set<int>::iterator it=myset.begin(); do { cout << ' ' << *it; } while ( mycomp(*(++it),highest) ); std::cout << '\n'; return 0; }
輸出:
myset包含: 0 1 2 3 4
在上面的示例中,最高變量存儲myset集合的最后一個(gè)元素,并使用該集合的第一個(gè)元素(按排序順序)初始化迭代器。Do-while循環(huán)用于打印將在其中運(yùn)行循環(huán)的元素,直到第一個(gè)鍵小于最后一個(gè)鍵為止(為此,它使用名為mycomp的key_comp()函數(shù))。
讓我們看一個(gè)簡單的實(shí)例:
#include <set> #include <iostream> int main( ) { using namespace std; set <int, less<int> > s1; set<int, less<int> >::key_compare kc1 = s1.key_comp( ) ; bool result1 = kc1( 2, 3 ) ; if( result1 == true ) { cout << "kc1(2,3)返回true值" << "其中kc1是s1的函數(shù)對象." << endl; } else { cout << "kc1(2,3)返回false值 " << "其中kc1是s1的函數(shù)對象。" << endl; } set <int, greater<int> > s2; set<int, greater<int> >::key_compare kc2 = s2.key_comp( ) ; bool result2 = kc2( 2, 3 ) ; if(result2 == true) { cout << "kc2(2,3)返回true值, " << "其中kc2是s2的函數(shù)對象。" << endl; } else { cout << "kc2(2,3)返回false值, " << "其中kc2是s2的函數(shù)對象。" << endl; } }
輸出:
kc1(2,3)返回值true,其中kc1是s1的函數(shù)對象。 kc2(2,3)返回false值,其中kc2是s2的函數(shù)對象。
在上面的示例中,使用了兩個(gè)集合,即m1和m2。m1的鍵比較對象較小,而m2的鍵比較對象較大。因此,當(dāng)我們compare(2,3)時(shí),m1的kc1函數(shù)對象返回true,而m2的kc2函數(shù)對象返回false。
讓我們看一個(gè)簡單的實(shí)例:
#include <set> #include <iostream> #include <string> using namespace std; typedef set<int> setObj ; int main(){ //默認(rèn)構(gòu)造函數(shù) setObj c1 ; setObj::key_compare kc = c1.key_comp() ; cout << "使用函數(shù)對象kc查找比較(10,4)..." << endl ; if (kc(10, 4) == true) cout << "kc(10,4)== true,即10 <4" << endl ; else cout << "kc(10,4) == false,即10 > 4" << endl ; return 0; }
輸出:
使用函數(shù)對象kc查找比較(10,4)... kc(10,4) == false,即10 > 4
在上面的示例中,set setobj的kc函數(shù)對象進(jìn)行compare(10,4),如果為true,則返回10 <4;如果不為true,則返回10> 4。