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
——————————————————————————————————————————————————————————————————