STL algorithm算法is_permutation(27)

is_permutation原型:

std::is_permutation

equality (1)
template <class ForwardIterator1, class ForwardIterator2>
   bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
                        ForwardIterator2 first2);
predicate (2)
template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
   bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
                        ForwardIterator2 first2, BinaryPredicate pred);

该函数是用来推断两个序列是否为同一元素集的不同排列。

该函数使用operator==或者是pred来推断两个元素是否是相等的。

其行为类似:

template <class InputIterator1, class InputIterator2>
  bool is_permutation (InputIterator1 first1, InputIterator1 last1,
                       InputIterator2 first2)
{
  std::tie (first1,first2) = std::mismatch (first1,last1,first2);
  if (first1==last1) return true;
  InputIterator2 last2 = first2; std::advance (last2,std::distance(first1,last1));
  for (InputIterator1 it1=first1; it1!=last1; ++it1) {
    if (std::find(first1,it1,*it1)==it1) {
      auto n = std::count (first2,last2,*it1);
      if (n==0 || std::count (it1,last1,*it1)!=n) return false;
    }
  }
  return true;
}

坑的是windows以下的codeblock竟然不支持这个函数,我汗!

一个简单的測试样例:

#include <iostream>  
#include <vector>  
#include <array>  
#include <algorithm>  
using namespace std;  
int main(){  
    vector<int> v1{1,2,3,4,5,6};  
    vector<int> v2{1,5,6,4,3,2};  
    vector<int> v3{1,3,2,5,6,4,1};//add a elements 1  
    vector<double> v4{1,2,4,3,5,6};  
	vector<int> v5{1,0,2,3,4,5,6};
    array<int,6> ai{6,5,3,4,2,1};  
  
    cout<<"v1=";  
    for(int &i:v1)  
        cout<<i<<" ";  
    cout<<endl;  
     cout<<"v2=";  
    for(int &i:v2)  
        cout<<i<<" ";  
    cout<<endl;  
   cout<<"v3=";  
    for(int &i:v3)  
        cout<<i<<" ";  
    cout<<endl;  
   cout<<"v4=";  
    for(double &i:v4)  
        cout<<i<<" ";  
    cout<<endl;  
	 cout<<"v5=";  
    for(int &i:v5)  
        cout<<i<<" ";  
    cout<<endl;
   cout<<"ai=";  
    for(int &i:ai)  
        cout<<i<<" ";  
    cout<<endl;  
    if(is_permutation(v1.begin(),v1.end(),v2.begin()))
		cout<<"Yes ,v1 and v2 is permutation!"<<endl; 
	else
		cout<<"No ,v1 and v2 is not permutation!"<<endl; 		 
	
	if(is_permutation(v1.begin(),v1.end(),v3.begin()))
		cout<<"Yes ,v1 and v3 is permutation!"<<endl; 
	else
		cout<<"No ,v1 and v3 is not permutation!"<<endl; 

	if(is_permutation(v1.begin(),v1.end(),v4.begin()))
		cout<<"Yes ,v1 and v4 is permutation!"<<endl; 
	else
		cout<<"No ,v1 and v4 is not permutation!"<<endl; 

	if(is_permutation(v1.begin(),v1.end(),v5.begin()))
		cout<<"Yes ,v1 and v5 is permutation!"<<endl; 
	else
		cout<<"No ,v1 and v5 is not permutation!"<<endl; 

	if(is_permutation(v1.begin(),v1.end(),ai.begin()))
		cout<<"Yes ,v1 and ai is permutation!"<<endl; 
	else
		cout<<"No ,v1 and ai is not permutation!"<<endl; 
  
  
}
执行的结果:


能够看到,尽管v3多了一个元素1,可是v1和v3还是属于同一元素集的不同排列!

v4的数据类型为double,也是一样!




——————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,能够在以下留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足。以便我改动,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:coderguang@gmail.com

2014-9-17

于GDUT

——————————————————————————————————————————————————————————————————




posted @ 2016-02-08 18:41  mengfanrong  阅读(401)  评论(0编辑  收藏  举报