C++ set key_comp()函数

C++ set key_comp()函数

C++ set key_comp() 函数用于返回用于比较键值的比较对象的副本,该比较对象由set容器使用。

比较对象 可用于比较容器中两个元素的键值。该比较对象在构造对象时给出,可以是函数指针或函数对象。无论哪种情况,该比较对象都接受两个相同类型的参数,如果根据 较弱的顺序 ,第一个参数在第二个参数之前,则返回true,否则返回false。

注意:默认情况下,比较对象是一个less对象,其返回结果与operator <相同。

语法

Key_compare key_comp() const;

注意:存储的对象定义了成员函数:

operator bool ( const  Key &  _Left , const Key &  _Right );

如果_Left在排序顺序中位于_Rigth之前且不相等,则返回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

在上面的示例中,highest变量存储了myset set的最后一个元素,并且迭代器初始化为set的第一个元素(按排序顺序)。使用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的键比较对象是less,m2的键比较对象是greater。因此,当我们比较(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

在上面的示例中,setobj的kc函数对象比较(10, 4),如果为真则返回10 < 4,如果不为真则返回10 > 4。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程