C++ set key_comp() 函數用於返回比較對象的副本,設置容器使用該副本來比較鍵。
比較對象可用於比較容器中兩個元素的鍵值。這個比較對象是在構造對象時給出的,它可以是指向函數或函數對象的指針。在任何一種情況下,這都需要兩個相同類型的參數,如果第一個參數根據較窄的弱順序在第二個參數之前,則返回 true,否則返回 false。
注意:默認情況下,比較對象是一個less對象,返回與operator <相同。
用法
Key_compare key_comp() const;
注意:存儲對象定義了成員函數:
operator bool ( const Key & _Left , const Key & _Right );
如果 _Left 在排序順序中排在前麵且不等於 _Right,則返回 true。
參數
空
返回值
它返回一個鍵比較函數對象。
複雜度
恒定。
迭代器有效性
沒有變化。
數據競爭
容器被訪問。
不訪問包含的元素:同時訪問和修改元素是安全的。
異常安全
如果拋出異常,則容器中沒有變化。
例子1
讓我們看一個簡單的例子來比較鍵值:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
set < int > m ;
set < int >::key_compare comp = m . key_comp () ;
cout <<"Compare keys (1 is true and 0 is false): "<< comp ( 1 , 5 ) <<endl ;
cout <<"Compare keys (1 is true and 0 is false): "<< comp ( 3 , 2 ) <<endl ;
}
輸出:
Compare keys (1 is true and 0 is false): 1 Compare keys (1 is true and 0 is false): 0
在上麵的例子中,comp(1, 5) 返回 true,因為 1 小於 5。comp(3, 2) 返回 false,因為 3 不小於 2。
例子2
讓我們看一個簡單的例子:
#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 contains:";
highest=*myset.rbegin();
set<int>::iterator it=myset.begin();
do {
cout << ' ' << *it;
} while ( mycomp(*(++it),highest) );
std::cout << '\n';
return 0;
}
輸出:
myset contains:0 1 2 3 4
在上麵的例子中,最高變量存儲 myset 集合的最後一個元素,迭代器用集合的第一個元素(按排序順序)初始化。 Do-while 循環用於打印循環將運行的集合元素,直到第一個鍵小於最後一個鍵(為此它使用名為 mycomp 的 key_comp() 函數)。
例子3
讓我們看一個簡單的例子:
#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 ) returns value of true, "
<< "where kc1 is the function object of s1."
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false "
<< "where kc1 is the function object of s1."
<< 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 ) returns value of true, "
<< "where kc2 is the function object of s2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false, "
<< "where kc2 is the function object of s2."
<< endl;
}
}
輸出:
kc1( 2,3 ) returns value of true, where kc1 is the function object of s1. kc2( 2,3 ) returns value of false, where kc2 is the function object of s2.
在上麵的例子中,使用了兩個集合,即 m1 和 m2。 m1的重點比較對象較小,m2的重點比較對象較大。因此,當我們比較 (2, 3) 時,m1 的 kc1 函數對象返回 true,而 m2 的 kc2 函數對象返回 false。
示例 4
讓我們看一個簡單的例子:
#include <set>
#include <iostream>
#include <string>
using namespace std;
typedef set<int> setObj ;
int main(){
//default constructor
setObj c1 ;
setObj::key_compare kc = c1.key_comp() ;
cout << "use function object kc to find less of (10, 4)..."
<< endl ;
if (kc(10, 4) == true)
cout << "kc(10, 4) == true, which means 10 < 4" << endl ;
else
cout << "kc(10, 4) == false, which means 10 > 4" << endl ;
return 0;
}
輸出:
use function object kc to find less of (10, 4)... kc(10, 4) == false, which means 10 > 4
在上麵的例子中,set setobj 的 kc 函數對象比較 (10, 4) 如果為真則返回 10 < 4,如果不為真則返回 10 > 4。
相關用法
- C++ set rbegin()用法及代碼示例
- C++ set upper_bound()用法及代碼示例
- C++ set swap()用法及代碼示例
- C++ set size()用法及代碼示例
- C++ set lower_bound()用法及代碼示例
- C++ set erase()用法及代碼示例
- C++ set find()用法及代碼示例
- C++ set end()用法及代碼示例
- C++ set cbegin()用法及代碼示例
- C++ set equal_range()用法及代碼示例
- C++ set rend()用法及代碼示例
- C++ set clear()用法及代碼示例
- C++ set begin()用法及代碼示例
- C++ set cbegin()、cend()用法及代碼示例
- C++ set count()用法及代碼示例
- C++ set max_size()用法及代碼示例
- C++ set crend()用法及代碼示例
- C++ set insert()用法及代碼示例
- C++ set emplace()用法及代碼示例
- C++ set value_comp()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ set key_comp()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。