C++ STL中的std::is_permutation

C++ STL中的std::is_permutation

C++函数std::algorithm::is_permutation()用于测试一个序列是否为另一个序列的置换。它使用运算符==进行比较。该函数在C++11中定义。

语法:

template <class ForwardIterator1, class ForwardIterator2 >
bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);

first1, last1: 第一个序列的初始和最终位置的输入迭代器。
first2 : 第二个序列的初始位置的输入迭代器。

返回值 :
true : 如果[first1,last1]范围内的所有元素与以任意顺序从first2开始的范围的元素相等。
false : 存在任何缺失或超出的元素。

该函数将考虑该序列的元素数量与[first1,last1]范围内的数量相同。如果序列较短,则会导致未定义行为。

// CPP程序检查两个数组是否相等
//使用std :: is_permutation
#include <iostream>
#include <algorithm>
  
//Driver Code
int main()
{
    int A[] = {1, 7, 0, 2};
    int B[] = {0, 7, 2, 1};
      
    //检查B是否包含A的所有元素
    if ( std :: is_permutation ( A, A+4, B ) )
    {
        std :: cout << "B是A的置换" ;
    }
      
    else
    {
        std :: cout << "B不是A的置换" ;
    }
    return 0;
}  

输出:

B是A的置换

还有另一种方法来检查数组是否相等,讨论在这里。

另一个例子: 检查两个字符串是否互为字谜

// CPP程序检查两个字符串是否互为字谜
//使用std :: is_permutation
#include <iostream>
#include <algorithm>
  
/*Driver Code*/
int main()
{
    std :: string A = "SILENT";
    std :: string B = "LISTEN";
      
    /*检查B是否为A的置换*/
    if ( is_permutation ( A.begin(), A.end(), B.begin() ) )
    {
        std :: cout << "互为字谜" ;
    }
      
    else
    {
        std :: cout << "不是互为字谜" ;
    }
    return 0;
}  

输出:

互为字谜

还有另一种方法可以检查两个字符串是否互为字谜,讨论在这里。

std :: permutation的版本

template< class ForwardIt1, class ForwardIt2 >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2 );

// (自C++11以来)
template< class ForwardIt1, class ForwardIt2, class BinaryPredicate >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, BinaryPredicate p );

// (自C++11以来)
template< class ForwardIt2 >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, ForwardIt2 last2 );

// (自C++14以来)
template< class ForwardIt1, class ForwardIt2, class BinaryPredicate >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, ForwardIt2 last,
BinaryPredicate p );

//(自C++14以来)

first1, last1 : 要比较的元素范围
first2, last2 : 第二个要比较的范围
p : 二元谓词,如果将元素视为相等,则返回true。

例子:

// False
is_permutation (c1.begin(), c1.end (), c2.begin(), c2.end()) 
  
// True
is_permutation (c1.begin() + 1, c1.end (), c2.begin(), c2.end())
  
// True, 所有的空范围都是彼此的排列。
is_permutation (c1.end(), c1.end(), c2.end(), c2.end())

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程