C++ next_permutation 没有以相反的顺序列出

标签 c++ permutation

有什么方法可以通过在 C++ 中使用 next_permutation 来打印所有排列,而忽略已经以相反顺序出现的排列。例如,在它打印{1, 2, 3, 4} 之后,它不应该打印{4, 3, 2, 1}

最佳答案

只要排列中的第一个元素按字典顺序小于最后一个元素,您就不会得到任何在反转时会重复的排列:

std::vector<int> v {1, 2, 3, 4};

do {
    if (v.front() < v.back()) { // first less than last
        std::copy(v.begin(), v.end(),
                  std::ostream_iterator<int>(std::cout, " "));
        cout << '\n';
    }
}
while (std::next_permutation(v.begin(), v.end()));

关于C++ next_permutation 没有以相反的顺序列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32421759/

相关文章:

c++ - 使用 googletest 识别类型参数化测试中使用的基类

c++ - 如果将不正确的参数类型传递给结构初始化器列表,为什么编译器不会生成编译错误?

Haskell 生成预过滤排列

c++ - 第二次将 map 插入 vector 失败

c++ - 在引用上调用虚函数

c++ - 我们如何使用 mpic++ 作为 Xcode 的编译器?

c# - 如何返回包含给定*部分*组合的所有组合?

功能非常有限的 Haskell 排列

python - 找出 N 个槽中 3 个数字的所有可能排列 [Python]

java - java中递归生成字符串的所有排列