使用struct的成员变量来比较next_permutation()

时间:2016-05-09 19:04:44

标签: c++ permutation

给定一个结构(例如):

struct permutation_object
{
    int index;
    string content;
};

这些结构的载体:

vector<permutation_object> perm_objects;

如何使用 int index 作为next_permutation()的比较器?我想要的想法是:

next_permutation(perm_objects.begin(), perm_objects.end(), perm_objects.permutation_object.index);

所以给出:

permutation_object a;
permutation_object b;
permutation_object c;

a.index = 0;
a.content = "hello ";

b.index = 1;
b.content = "world ";

c.index = 2;
c.content = "test ";

vector<permutation_object> perm_objects;
perm_objects.push_back(a);
perm_objects.push_back(b);
perm_objects.push_back(c);

perm_objects的next_permutation应该给出顺序:a,c,b然后是b,a,c等。但是我不确定我是否应该制作自定义比较器或者我的语法只是不正确。不幸的是,我找不到很多这样的例子

1 个答案:

答案 0 :(得分:1)

std::next_permutation有一个重载,它接受一个比较对象并使用它来比较范围的元素以获得下一个排列。您可以使用该重载并指定仅按index排序的自定义活动者。使用看起来像

的lambda
vector<permutation_object> perm_objects;
// fill vector
do
{
    //stuff
} while (std::next_permutation(perm_objects.begin(), perm_objects.end(),
                               [](const auto & lhs, const auto & rhs) 
                                 { return lhs.index < rhs.index; });