C++ set value_comp()函数
C++ set value_comp() 函数返回一个 比较对象 。该函数用于比较两个元素,以判断第一个元素的键是否在第二个元素之前。
它接受两个相同类型的参数,并根据较窄的弱顺序,如果第一个参数在第二个参数之前,则返回true,否则返回false。
例如 :- 对于一个集合m,如果两个元素e1(k1, d1)和e2(k2, d2) 是value_type类型的对象,则k1和k2是key_type类型的键,d1和d2是setped_type类型的数据,则m value_comp(e1, e2)等同于m key_comp(k1, k2)。
语法
value_compare value_comp() const;
注意:存储对象定义了一个成员函数:
bool-operator (value_type &left, value_type &right);
它返回 true ,如果左键的值在排序顺序中位于右键的值之前且不相等。
参数
无
返回值
它返回一个值比较函数对象。
复杂度
常数。
迭代器有效性
无更改。
数据竞争
访问容器。
不访问包含的元素:并发访问集的元素是安全的。
异常安全
如果抛出异常,容器不会发生任何更改。
示例1
让我们看一个简单的比较元素值的示例:
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> c;
set<int>::value_compare comp = c.value_comp();
cout << "Compare 2 to 5 (1 is true and 0 is false): "<<comp(2, 5) << endl;
cout << "Compare 8 to 5 (1 is true and 0 is false): "<<comp(8, 5) << endl;
}
输出:
Compare 2 to 5 (1 is true and 0 is false): 1
Compare 8 to 5 (1 is true and 0 is false): 0
在上面的示例中,comp(2, 5)返回true,因为2小于5。而comp(8, 5)返回false,因为8不小于5。
示例2
让我们来看一个简单的示例:
#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 contains:";
int highest=*myset.rbegin();
set<int>::iterator it=myset.begin();
do {
cout << ' ' << *it;
} while ( mycomp(*(++it),highest) );
cout << '\n';
return 0;
}
输出:
myset contains: 0 1 2 3 4
在上述示例中,highest变量存储了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> >::value_compare vc1 = s1.value_comp( );
bool result1 = vc1( 2, 3 );
if( result1 == true )
{
cout << "vc1( 2,3 ) returns value of true, "
<< "where vc1 is the function object of s1."
<< endl;
}
else
{
cout << "vc1( 2,3 ) returns value of false, "
<< "where vc1 is the function object of s1."
<< 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 ) returns value of true, "
<< "where vc2 is the function object of s2."
<< endl;
}
else
{
cout << "vc2( 2,3 ) returns value of false, "
<< "where vc2 is the function object of s2."
<< endl;
}
}
输出:
vc1( 2,3 ) returns value of true, where vc1 is the function object of s1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of s2.
示例4
让我们看一个简单的示例来展示key_comp()和value_comp()之间的区别:
#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
在上面的示例中,当我们比较key_comp()和value_comp()时,对于这样的set容器,这两个词是相同的。对于这两种类型的函数,它们将返回相同的值。