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

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


STL algorithm算法is_permutation(27)的更多相关文章

  1. STL algorithm算法merge(34)

    merge原型: std::merge default (1) template <class InputIterator1, class InputIterator2, class Outpu ...

  2. STL algorithm算法mismatch(37)

    mismatch原型: std::mismatch equality (1) template <class InputIterator1, class InputIterator2> p ...

  3. STL algorithm算法lower_bound和upper_bound(31)

    lower_bound原型: function template <algorithm> std::lower_bound default (1) template <class F ...

  4. STL algorithm算法minmax,minmax_element(36)

    minmax原型: std::minmax C++11 C++14 default (1) template <class T> pair <const T&,const T ...

  5. STL algorithm算法min,min_element(35)

    min样板: std::min C++98 C++11 C++14 default (1) template <class T> const T& min (const T& ...

  6. STL algorithm算法max,max_elements(33)

    max原型: std::max C++98 C++11 C++14 default (1) template <class T> const T& max (const T& ...

  7. STL algorithm算法mov,move_backward(38)

    move原型: std::move template <class InputIterator, class OutputIterator> OutputIterator move (In ...

  8. STL algorithm算法make_heap和sort_heap(32)

    make_heap原型: std::make_heap default (1) template <class RandomAccessIterator> void make_heap ( ...

  9. STL algorithm算法lexicographical_compare(30)

    lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator ...

随机推荐

  1. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  2. Python之路 Day12

    day12主要内容:html基础.CSS基础 HTML HTML概述: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标 ...

  3. Altera FPGA中的pin简介

    第一步要看的肯定是pin planner ,这个是黑金四代EP4CE15F17C8的视图 先就是发现他们pin有不同的颜色区域,分别对应不同的bank,应该是有的设计里面要求pin在同一个bank吧( ...

  4. Linux 特殊符号使用: 倒引号`的使用

    Linux中有很多特殊符号,这里介绍 ` 倒引号的含义. 我们考虑下这个场景,有时我们需要将一个命令的执行结果赋值给某个变量,或者别的用途. 这时我们可以用两个`倒引号将该命令括起来. 例1: 如 e ...

  5. im 编辑命令总结

    一. VIM高亮 进入vim后,在普通模式下输入如下命令,开启php代码高亮显示   :syntax enable   :source $VIMRUNTIME/syntax/php.vim   二. ...

  6. zzuli求最大值

    1786: 求最大值 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 134  Solved: 28SubmitStatusWeb Board Desc ...

  7. Linux内核空间-用户空间通信之debugfs

    一.debugfs文件系统简介 debugfs虚拟文件系统是一种内核空间与用户空间的接口,基于libfs库实现,专用于开发人员调试,便于向用户空间导出内核空间数据(当然,反方向也可以).debugfs ...

  8. iOS:(接口适配器3)--iPhone适应不同型号 6/6plus 前

    对于不同的苹果设备.检查每个参数<iOS:机型參数.sdk.xcode各版本号>.        机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了.表示机器屏幕尺寸变大了: 像素:表示屏幕 ...

  9. KeyValuePair用法(转)

    转载自:http://blog.sina.com.cn/s/blog_9741eba801016w61.html C# KeyValuePair<TKey,TValue>的用法.结构体,定 ...

  10. 【转】Lua脚本语法说明简介

    Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了.估计看完了,就懂得怎么写Lua程序了. 在Lua中,一切都是变量, ...