可以再次用作数字的所有数字的排列 在C++中,如果我需要在代码中进一步使用这些排列,那么什么是生成数字的所有排列的最好方法是什么?

可以再次用作数字的所有数字的排列 在C++中,如果我需要在代码中进一步使用这些排列,那么什么是生成数字的所有排列的最好方法是什么?,c++,combinatorics,C++,Combinatorics,假设我有这个intn=12345。我需要生成所有的排列,例如。G12354、12435等,并能将其用作数字 当然,我可以提取每个数字,将所有数字放入一个向量,然后运行std::next_置换,但这对我来说似乎是蛮力。是否有更优雅的东西? < P>“最佳”C++解决方案是使用专门为所需目的设计的C++元素/算法。而且,如果你想进行排列,那么std::next_permutation就是一种选择 因此,我们将首先将值转换为字符串,然后获取所有排列并将每个排列转换为数字。有了这个号码我们就可以工作了

假设我有这个
intn=12345
。我需要生成所有的排列,例如。G12354、12435等,并能将其用作数字

当然,我可以提取每个数字,将所有数字放入一个向量,然后运行std::next_置换,但这对我来说似乎是蛮力。是否有更优雅的东西?

< P>“最佳”C++解决方案是使用专门为所需目的设计的C++元素/算法。而且,如果你想进行排列,那么
std::next_permutation
就是一种选择

因此,我们将首先将值转换为字符串,然后获取所有排列并将每个排列转换为数字。有了这个号码我们就可以工作了

请参阅:

#include <algorithm>
#include <string>
#include <iostream>

int main()
{
    // Some test number
    constexpr unsigned int number{ 54321 };

    // Convert to string and sort the digits
    std::string s{ std::to_string(number) };
    std::sort(s.begin(), s.end());

    // Work with all permutations
    do {
        // Get the associated value
        unsigned long value{ std::stoul(s) };

        // Do what ever you want with the value
        std::cout << value << "\n";

    } while (std::next_permutation(s.begin(), s.end()));
}
#包括
#包括
#包括
int main()
{
//一些测试号码
constexpr无符号整数{54321};
//转换为字符串并对数字进行排序
std::string s{std::to_string(number)};
std::sort(s.begin(),s.end());
//处理所有排列
做{
//获取关联的值
无符号长值{std::stoul(s)};
//你想用这个值做什么就做什么

std::用一个开放式的“做X的最佳方式是什么”来解决问题在C++中,如果你把这个问题提交给三个C++开发者,你会得到四个不同的答案。不要过早的优化。如果你有一个蛮力的方法,那么就去实现它。这样做你可能已经有了一些想法来改进它。任何东西都比用<代码> NExtPype完全不优雅的东西更优雅。rmutation
?听起来像是一个糟糕的“未发明于此”综合征。您尚未指定如何处理重复数字或前导零。