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; }

执行的结果:

STL algorithm算法is_permutation(27)

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

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

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

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

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

author:天下无双

Email:coderguang@gmail.com

2014-9-17

于GDUT

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


上一篇:java中的Iterator与增强for循环的效率比较


下一篇:MyBatis的好处及常见问题