【发布时间】:2011-03-12 05:22:42
【问题描述】:
是否可以使用 std::next_permutation() 来置换我创建的类的向量的元素?
next_permutation() 中的比较参数是如何工作的?
【问题讨论】:
标签: c++ class vector permutation
是否可以使用 std::next_permutation() 来置换我创建的类的向量的元素?
next_permutation() 中的比较参数是如何工作的?
【问题讨论】:
标签: c++ class vector permutation
是的,最简单的方法是在你的类中覆盖 operator
comp 参数是一个函数指针,它接受向量的两个迭代器,并根据您希望它们的排序方式返回 true 或 false。
编辑:未经测试,但值得:
class myclass
{
public:
myclass() : m_a( 0 ){}
void operator = ( int a ) { m_a = a; }
private:
friend bool operator<( const myclass& lhs, const myclass& rhs ) { return lhs.m_a < rhs.m_a; }
int m_a;
};
int _tmain(int argc, _TCHAR* argv[])
{
myclass c;
std::vector<myclass> vec;
for( int i = 0; i < 10; ++i )
{
c = i;
vec.push_back( c );
}
//these two should perform the same given the same input vector
std::next_permutation( vec.begin(), vec.end() );
std::next_permutation( vec.begin(), vec.end(), &operator< );
return 0;
}
【讨论】:
没问题;您只需将迭代器传递给第一个元素,并将一个迭代器传递给后一个元素,就像 STL 算法一样。
它是一个函子,用于比较向量(或一般容器)的元素;它应该像任何 here 在上下文中的解释略有不同,但它们始终相同)。
顺便说一句,如果你为你的类定义了一个
【讨论】:
是否可以使用 std::next_permutation() 来置换我创建的类的向量的元素?
是的!
试试这个
#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
typedef std::vector<int> V; //<or_any_class>
V v;
for(int i=1;i<=5;++i)
v.push_back(i*10);
do{
std::cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<" "<<v[3]<<" "<<v[4]<<std::endl;;
}
while(std::next_permutation(v.begin(),v.end()));
}
next_permutation() 中的比较参数是如何工作的?
This 可能会有所帮助
【讨论】: