C++教程
C++控制语句
C++函数
C++数组
C++指针
C++对象
C++继承
C++多态
C++抽象
C++常用
C++ STL教程
C++迭代器
C++程序

C++ multiset value_comp()

C++ multiset value_comp()

C++ multiset value_comp()函数返回比较对象。此函数用于比较两个元素,以检查第一个元素的键是否位于第二个元素之前。
它接受两个相同类型的参数,并且如果第一个参数位于第二个参数之前,则返回true较弱的较弱阶,否则返回 false 。
例如:-对于 multiset m,如果两个元素e1(k1,d1)和e2(k2,d2)是value_type类型的对象,其中k1和k2是它们的类型为key_type和d1和d2的键是它们的数据,则m value_comp(e1,e2)等效于m key_comp(k1,k2)。

语法

value_compare value_comp() const;
注意: 存储的对象定义了一个成员函数:
bool-operator (value_type &left, value_type &right);
如果左键的值在排序顺序的前面,并且不等于右键的值,则返回true。

参数

返回值

它返回一个值比较函数对象。

复杂度

常量。

迭代器有效性

无变化。

数据竞争

已访问容器。
不访问任何包含的元素: 同时访问 multiset 合的元素是安全的。

异常安全性

如果引发异常,则容器中没有任何变化。

示例1

让我们看一下比较元素值的简单示例:
#include <iostream>
#include <set>
using namespace std;
int main()
{
  multiset<int> c;
  multiset<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;
  
  return 0;
}
输出:
Compare 2 to 5 (1 is true and 0 is false): 1
Compare 8 to 5 (1 is true and 0 is false): 0
在上面的示例中,因为2小于5,所以comp(2,5)返回true。由于8不小于5,comp(8,5)返回false。

示例2

让我们看一个简单的示例:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  multiset<int> mymultiset;
  multiset<int>::value_compare mycomp = mymultiset.value_comp();
  for (int i=0; i<=5; i++) mymultiset.insert(i);
  cout << "mymultiset contains:";
  int highest=*mymultiset.rbegin();
  multiset<int>::iterator it=mymultiset.begin();
  do {
    cout << ' ' << *it;
  } while ( mycomp(*(++it),highest) );
  cout << '\n';
  return 0;
}
输出:
mymultiset contains: 0 1 2 3 4
在上面的示例中,最高变量存储mymultiset multiset 的最后一个元素,并使用该 multiset 的第一个元素(按排序顺序)初始化迭代器。 Do-while循环用于打印将在其中运行循环的 multiset 元素,直到第一个键小于最后一个键为止(为此,它使用名为mycomp的key_comp()函数)。

示例3

让我们看一个简单的示例:
#include <set>
#include <iostream>
int main( )
{
   using namespace std;
   multiset <int, less<int> > s1;
   multiset <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;
   }
   multiset <int, greater<int> > s2;
   multiset<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>
using namespace std;
int main(){
multiset<int> mymultiset;
int highest1, highest2;
multiset<int>::key_compare   myCompKeyForMultiset = mymultiset.key_comp();
multiset<int>::value_compare myCompValForMultiset = mymultiset.value_comp();
for (int i=0; i<=5; i++) {
  mymultiset.insert(i);
}
highest1=*mymultiset.rbegin();
multiset<int>::iterator it=mymultiset.begin();
while ( myCompKeyForMultiset(*it, highest1) ) it++;
cout << "\nhighest1 is " << highest1;  // prints 5
highest2 = *mymultiset.rbegin();
it=mymultiset.begin();
while ( myCompValForMultiset(*it, highest2) ) it++;
cout << "\nhighest2 is " << highest2;   // prints 5
return 0;
}
输出:
highest1 is 5
highest2 is 5
在上面的示例中,当我们比较key_comp()和value_comp()时,对于这样的 multiset 容器,这两个词是相同的。对于这两种类型的函数,它将返回相同的值。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4