如何在C++中匹配两个数组的内容

Nic*_*las 2 c++ arrays string containers set

我有两个单独的单词数组,例如:

array1 = word1, word2, word3
array2 = word4, word5, word6
Run Code Online (Sandbox Code Playgroud)

我试图根据用户输入(这将是2个单词)匹配两个数组.例如,您输入"word1 word6",程序会给你x.你输入"word3 word4",程序给你y.不需要/不应该在每个数组内匹配(因此输入"word1 word3"不应该提供除错误之外的任何内容).

现在,我正在考虑使用string::find在输入字符串中查找每个数组的内容.然而,在那之后,我仍然坚持如何获取这些结果(如果有的话)并将它们相互匹配.

例如,我会input.find(contents of array1),如果找到了某些东西,那就拿下它array1[x],看看array2[x]通过同一输入中的单独行找到的组合是否与第三个可能组合列表相匹配.如果确实如此,我会根据它的组合拆分响应.

我知道如果我只有一个可能的匹配列表会更容易,并在输入字符串中找到.但我想保持两组单词分开,因为代码会更灵活(我会以这种方式学习更多).

希望有人可以给我一些关于如何进行的提示?

650*_*502 5

C++有这种问题的特殊结构,它叫做"map"

typedef std::map< std::pair< std::string, std:: string >, int > MyMapType;
MyMapType my_map;
Run Code Online (Sandbox Code Playgroud)

上面是一个给定一对字符串返回int的映射.当然,并不是所有可能的字符串对都需要包含在地图中:

my_map[std::make_pair("A", "B")] = 42;
my_map[std::make_pair("A", "C")] = 99;
my_map[std::make_pair("B", "D")] = 103;
Run Code Online (Sandbox Code Playgroud)

要查看是否存在特定对,您可以使用map::find:

MyMapType::iterator i = my_map.find(std::make_pair(x, y));
if (i == my_map.end()) {
    std::cout << "Pair is not defined\n";
} else {
    // Pair is present
    std::cout << "Associated value is " << *i << "\n";
}
Run Code Online (Sandbox Code Playgroud)