生成对列表

时间:2017-05-21 19:15:34

标签: c++

我有 string [] 包含名字(让我们说只是足球队,没关系)。

我需要生成这些名称的随机对,但我不知道该怎么做。

假设 string [] 如下所示:

string[] s = {"Name1", "Name2", "Name3", "Name4"}

我需要生成这些的随机组合,所以输出就像这样

Name1 ---
         |-----
Name3 ---      |
               |--
Name4 ---      |
         |-----
Name2 ---

如果输出是这样的,或者更少的图形,这无关紧要,它只是插图。 只有我需要的东西 string[][] = {{"Name1","Name3"}{"Name4", "Name2"}

1 个答案:

答案 0 :(得分:0)

C ++使得这样的事情比你想象的更容易。您可以使用稍微更高级的C ++构造来保存名称列表,将其洗牌并将其剪切成对。首先,在C ++中,通常认为使用std :: vector&而不是常规数组是一种好习惯。 C ++向量类为您创建一个动态数组,管理所有内存,因此您不必这样做。如果你真的开始使用std :: string []也很好,那么谈判就更难了。为了使用向量解决您的问题,我创建了一个字符串向量,如下所示:

std::vector<std::string> v{"name1", "name2", "name3", "name4"};

你可以做的是使用一个名为std :: random_shuffle的C ++内置算法将向量混合成这样的东西:

{"name2","name3","name1","name4"}

或向量的任何其他随机排列。然后你可以简单地遍历矢量,将每两个值配对。在C ++中,您可以使用std :: pair数据结构,它包含两个类型为T的值,在您的情况下为std :: string。你可以制作这些对,然后将它们推到一对矢量上,而不是将你的最终结果存储在一个二维数组中。

如果你不想做所有这些C ++的东西,你可以简单地使用数组并遵循相同的格式。随机播放你的数组,在你的数组上循环,将这对名字放入你的二维数组中。

如果您想使用更多与C ++相关的数据结构和算法,请查看以下页面:

载体: http://www.cplusplus.com/reference/vector/vector/

对: http://www.cplusplus.com/reference/utility/pair/

random_shuffle:http://www.cplusplus.com/reference/algorithm/random_shuffle/