我有一个100个字符串和另一个空矢量的向量,我正在尝试用100个组中的n个字符串的每个可能组合填充空向量。(n = 1,2,3,...)
如果n = 1,则获得由1个字符串组成的每个唯一向量(或所有100个字符串作为向量)
如果n = 2,那么您将获得由2个字符串(或100 ^ 2个变体)组成的每个唯一向量
C ++不是我的母语。
到目前为止我有一些尝试,而我在Zou_script(内部专有)中所做的就是为每个字符串分配一个数字,然后通过这些数字的所有可能组合进行置换,然后通过Vector引用单个字符串[]创建向量。
这似乎很慢并且缺乏优雅,如果字符串库大得多,将字符串存储在内存中可能会很糟糕。
我使用过std :: next_permutation,但是我很难将它优雅地扩展到由字符串组成的排序向量。
如何使用C ++编程语言填充n向量长度的所有可能字符串组合的向量? < - 问题。
任何人都可能有任何帮助吗?如果你不确定或被这个问题吓倒了,可以去下一个问题。
更新
我已经设法用C ++复制了这个技术但是next_permutation明显变慢了,因为它不理解它不需要计算整个排列向量,只有n个量。
任何方法操纵next_permutation只计算向量置换的x元素?
答案 0 :(得分:0)
我已经问了这个问题,但我会尽我所能给出答案。事实上,这是C / C ++中经过深入研究和经常被问到的问题。
“如何一次考虑一组N个元素的排列?”
有很多方法可以解决这个问题。一种方法是生成一个整数向量,用它来映射到元素的向量。
使用std :: next_permutation可以生成数字列表(整数向量的排列)并截断到您正在考虑的项目数量。然后可以使用矢量工具对此列表进行排序,删除重复项。这将为您提供N个整数的所有唯一排列的列表,一次r,用于映射到元素向量。
然后就可以像调用排列整数列表中的r数字一样简单,并在元素列表索引中使用它们来生成元素的排列。
for (int k = 0; k < linecount_of_integer_permutation_list; k++)
{
// insert code for calling up integer permutation list line
// and assigning that permutation to vector
for (int i = 0; i < r; i++)
{
file << element[intvec[r]]; // can put whatever delimiters you want/need
}
file << std::endl;
intvec.clear();
// remember to clear vectors, or other flags depending on what you need
}
这很麻烦且非常慢。
https://howardhinnant.github.io/combinations.html
对如何更快地处理此问题有一些非常好的想法。以上内容适用于小型设备,但是从小型到完全无法管理的跳跃在排列中非常快。
感谢您的帮助。这实际上是一个有趣的问题,但显然很多人不需要编程。