C ++ set value_comp()函數(shù)的作用是:返回一個(gè)比較對(duì)象。這個(gè)函數(shù)用于比較兩個(gè)元素,以檢查第一個(gè)元素的鍵是否在第二個(gè)元素之前。用來(lái)比較value大小。
例如:-對(duì)于集合m,如果兩個(gè)元素e1(k1,d1)和e2(k2,d2)是value_type類(lèi)型的對(duì)象,其中k1和k2是其key_type類(lèi)型的鍵,而d1和d2是其data類(lèi)型的數(shù)據(jù)value_type,則m value_comp(e1,e2)等效于m key_comp(k1,k2)。
value_compare value_comp() const;
bool-operator (value_type &left, value_type &right);
如果按排序順序,left的值在前面且不等于right的值,則返回true。
沒(méi)有
它返回一個(gè)值比較函數(shù)對(duì)象。
不變。
沒(méi)有變化。
容器被訪問(wèn)。
沒(méi)有包含元素的訪問(wèn):同時(shí)訪問(wèn)集合的元素是安全的。
如果引發(fā)異常,則容器中沒(méi)有任何更改。
讓我們看一下比較元素值的簡(jiǎn)單示例:
#include <iostream> #include <set> using namespace std; int main() { set<int> c; set<int>::value_compare comp = c.value_comp(); cout << "比較2和5(1為真,0為假): "<<comp(2, 5) << endl; cout << "比較8和5(1為真,0為假): "<<comp(8, 5) << endl; }
輸出:
比較2和5(1為真,0為假): 1 比較8和5(1為真,0為假): 0
在上面的示例中,因?yàn)?小于5,所以comp(2,5)返回true;由于8不小于5,comp(8,5)返回false。
讓我們看一個(gè)簡(jiǎn)單的實(shí)例:
#include <iostream> #include <set> using namespace std; int main () { set<int> myset; set<int>::value_compare mycomp = myset.value_comp(); for (int i=0; i<=5; i++) myset.insert(i); cout << "myset 包含:"; int highest=*myset.rbegin(); set<int>::iterator it=myset.begin(); do { cout << ' ' << *it; } while ( mycomp(*(++it),highest) ); cout << '\n'; return 0; }
輸出:
myset 包含: 0 1 2 3 4
在上面的示例中,最高變量存儲(chǔ)myset集合的最后一個(gè)元素,并使用該集合的第一個(gè)元素(按排序順序)初始化迭代器。Do-while循環(huán)用于打印將在其中運(yùn)行循環(huán)的元素,直到第一個(gè)鍵小于最后一個(gè)鍵為止(為此,它使用名為mycomp的key_comp()函數(shù))。
讓我們看一個(gè)簡(jiǎn)單的實(shí)例:
#include <set> #include <iostream> int main( ) { using namespace std; set <int, less<int> > s1; set <int, less<int> >::value_compare vc1 = s1.value_comp( ); bool result1 = vc1( 2, 3 ); if( result1 == true ) { cout << "vc1(2,3)返回true值, " << "其中vc1是s1的函數(shù)對(duì)象。" << endl; } else { cout << "vc1(2,3)返回false值, " << "其中vc1是s1的函數(shù)對(duì)象。" << endl; } set <int, greater<int> > s2; set<int, greater<int> >::value_compare vc2 = s2.value_comp( ); bool result2 = vc2( 2, 3 ); if( result2 == true ) { cout << "vc2(2,3)返回true值, " << "其中vc2是s2的函數(shù)對(duì)象。" << endl; } else { cout << "vc2(2,3)返回false值, " << "其中vc2是s2的函數(shù)對(duì)象。" << endl; } }
輸出:
vc1(2,3)返回true值,其中vc1是s1的函數(shù)對(duì)象。 vc2(2,3)返回false值,其中vc2是s2的函數(shù)對(duì)象。
讓我們看一個(gè)簡(jiǎn)單的示例,以顯示key_comp()和value_comp()之間的區(qū)別:
#include <set> #include <iostream> #include<map> using namespace std; int main(){ set<int> myset; int highest1, highest2; set<int>::key_compare myCompKeyForSet = myset.key_comp(); set<int>::value_compare myCompValForSet = myset.value_comp(); for (int i=0; i<=5; i++) { myset.insert(i); } highest1=*myset.rbegin(); set<int>::iterator it=myset.begin(); while ( myCompKeyForSet(*it, highest1) ) it++; cout << "\nhighest1 is " << highest1; // prints 5 highest2 = *myset.rbegin(); it=myset.begin(); while ( myCompValForSet(*it, highest2) ) it++; cout << "\nhighest2 is " << highest2; // prints 5 return 0; }
輸出:
highest1 is 5 highest2 is 5
在上面的示例中,當(dāng)我們比較key_comp()和value_comp()時(shí),對(duì)于這樣的集合容器,這兩個(gè)詞是相同的。對(duì)于這兩種類(lèi)型的函數(shù),它將返回相同的值。