【发布时间】:2017-05-19 10:23:18
【问题描述】:
我有一个字符串向量,其值为{"Soa", "8", "m", "4", "8"}
我想从大小为k 的数组中打印指定大小n 的所有排列而不重复(但允许重复,如上面向量中的“8”)。我已经搜索了这个问题的解决方案,但找不到任何适合这种情况的解决方案。
目前的代码是:
#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
int main()
{
std::vector<std::string> arr = { "Soa", "4", "m", "8", "8" };
std::sort(arr.begin(), arr.end());
do {
for(auto& i: arr)
std::cout << i;
std::cout << '\n';
} while(std::next_permutation(arr.begin(), arr.end()));
}
此代码仅打印向量大小的所有排列 (n=k),因此它打印除 n=5 之外的我需要的内容。我想要指定n,例如让n=2 生成这些排列(它们的打印顺序无关紧要):
48
4Soa
4m
84
88
8Soa
8m
Soa4
Soa8
Soam
m4
m8
mSoa
编辑:Nathan 链接的解决方案不起作用,它将 84 视为 48。仍在寻找解决方案。
【问题讨论】:
-
相关/重复,我认为它不排除重复:stackoverflow.com/questions/5095407/…
-
嗨,问题和解释与我不符
-
@Trailo 他们解决这个问题的方法是将结果存储在
std::set中。这将确保您只获得唯一的排列。 -
@NathanOliver 问题是我需要生成大约 50 GB 的这些字符串,这比我在 std::set 中保留的内存要多得多。
-
你打算用 50 GB 这样的字符串做什么?