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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。