zoukankan      html  css  js  c++  java
  • 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

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




  • 相关阅读:
    MySQL SQL语言学习
    02-MySQL执行计划详解(EXPLAIN)
    linux下删除oracle11g单实例的方法
    01. Oracle 实例恢复
    替代变量与SQL*Plus环境设置
    9. Oracle 归档日志
    8. Oracle 联机重做日志文件(ONLINE LOG FILE)
    7. Oracle 控制文件(CONTROLFILE)
    6. Oracle 回滚(ROLLBACK)和撤销(UNDO)
    5. Oracle 表空间与数据文件
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5185130.html
Copyright © 2011-2022 走看看