将 std::next_permutation 与 2D 数组一起使用
Posted
技术标签:
【中文标题】将 std::next_permutation 与 2D 数组一起使用【英文标题】:use std::next_permutation with 2D Array 【发布时间】:2016-03-22 09:52:03 【问题描述】:我想打印数组AAA
的所有排列。我无法弄清楚函数std::next_permutation
的第二个参数?
#include <algorithm>
char AAA[4][4] = "abc","123","ABC";
do
printf("%s %s %d\n",AAA[0],AAA[1],AAA[2]);
while( std::next_permutation( AAA, ???? ));
应该是&AAA[3]
还是别的什么?
【问题讨论】:
用char*
,你会比较地址,用std::string AAA[]
代替。
顺便说一句,在 ascii 中,'1' < 'A'
和 'A' < 'a'
,因此您应该初始化为 "123", "ABC", "abc"
以迭代所有排列。
不是真的,Jarod42。由于排序顺序是基于比较地址,而不是指向的数据,这实际上将循环所有迭代。虽然,诚然,这可能比 OP 的良好计划更幸运 - 使用 std::string
的数组(或容器)需要首先排序,因为排序顺序基于字符串中的数据,而不是它们的地址。
【参考方案1】:
应该是
while( std::next_permutation( std::begin(AAA), std::end(AAA)));
或者(更简单地说,如果你知道 AAA
正好有 4
元素)
while( std::next_permutation( AAA, AAA + 4));
建议AAA
是std::string
或std::vector<std::string>
的数组,但如果循环要遍历所有排列,则需要排序。
如果您使用std::cout
流式输出,而不是使用printf()
,它会让 C++ 人少一些畏缩。
【讨论】:
以上是关于将 std::next_permutation 与 2D 数组一起使用的主要内容,如果未能解决你的问题,请参考以下文章
C++ STL应用与实现62: 如何使用std::next_permutation