English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ set key_comp() 使用方法及示例

C++ STL Set(집합)

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

比较对象可用于比较容器中两个元素的键值。这个比较对象是在构造对象时给出的,它可以是一个指向函数的指针,也可以是一个函数对象。在这两种情况下,它都接受相同类型的两个参数,如果第一个参数在第二个参数之前,则返回true,否则返回false。

注意:默认情况下,比较对象是less对象,它返回的值与运算符<相同。

语法

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 << "比较键(1为真,0为假): "<< comp( 1 ,  5 ) <<endl; 
  cout << "比较键(1为真,0为假): "<< comp( 3 ,  2 ) <<endl; 
 }

출력:

比较键(1为真,0为假):  1
比较键(1为真,0为假): 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包含:";
  highest=*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 셋의 마지막 요소를 저장하고, 이 셋의 첫 번째 요소(정렬 순서에 따라)를 이터레이터로 초기화합니다. 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 )     
   {  
      << \1(2,3)는 true 값을 반환"  
           << \1은 s1의 함수 객체."  
           << endl;  
   }  
   else     
   {  
      << \1(2,3)는 false 값을 반환, "  
           << \1은 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)     
   {  
      << \2(2,3)는 true 값을 반환, "  
           << \2은 s2의 함수 객체."  
           << endl;  
   }  
   else     
   {  
      << \2(2,3)는 false 값을 반환, "  
           << \2은 s2의 함수 객체."  
           << endl;  
   }  
}

출력:

kc1(2,3)는 true 값을 반환하며, 그 중 kc1은 s1의 함수 객체.
kc2(2,3)는 false 값을 반환하며, 그 중 kc2은 s2의 함수 객체.

은 위의 예제에서 두 개의 셋을 사용했습니다. 즉 m1와 m2입니다.1은22,3)의 키 비교 객체가 큽니다. 따라서 우리가 compare(",1의 kc1함수 객체가 true를 반환하면 m2의 kc2함수 객체가 false를 반환합니다.

예제4

간단한 예제를 보겠습니다:

#include <set>
#include <iostream>
#include <string>
using namespace std;
typedef set<int> setObj;
int main(){
	//기본 생성자
	setObj c1 ;
    setObj::key_compare kc = c1.key_comp();
	cout << \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;
}

출력:

함수 객체 kc를 사용하여 비교(10,4)...
kc(10,4) == false, 즉10 > 4

위의 예제에서 set setobj의 kc 함수 객체가 compare(10,4),만약 true면 반환10 <4؛만약 true가 아니면 반환10> 4。

C++ STL Set(집합)