我正在尝试编写一个可以检查两个字符串是否具有相同频率的所有字符的函数。因此,为了做到这一点,我尝试制作两个地图,即 unordered_map<char, int>
。因此,在下一步中,我只想比较地图上每个 char
的每个值。
string A;
string B;
unordered_map<char, int> a;
unordered_map<char, int> b;
for (char i : A)
{
a[i]++;
}
for (char i : B)
{
b[i]++;
}
for (char i : A &&char j : B)
{
//code goes here
}
那么,是否有可能有一个包含两个不同变量的 For-Each 循环?
答案 0 :(得分:3)
我将绕过您的 for
循环问题,如果您想知道两个映射是否包含相同的键值元素,您可以使用 std::unordered_map::operator==
。
unordered_map<char, int> a;
unordered_map<char, int> b;
for (char i : A)
{
a[i]++;
}
for (char i : B)
{
b[i]++;
}
if (a == b) // this does the right thing
{
// the frequencies are the same
}
答案 1 :(得分:1)
简单的答案是否定的,你不能那样做。这个for循环被称为for each loop,结构如下:
for each ELEMENT in MAP/ARRAY/VECTOR
do something
如果我是对的,你的意图是有这样的东西
in loop
store each element of MAP_A into i and each element of MAP_B in j
不可能
您唯一的解决方案是: 注意:这适用于相同大小的数组。
for (int i = 0; i < NumOfElemens; ++i)
int aa = a[i];
int bb = b[i];
// DO SOMETHING
}
您也可以将其简写为:
for (int i = 0, aa = a[0], bb = b[0]; i < NumOfElemens; ++i, aa = a[i], bb = b[i]) {
// DO SOMETHING
}
这也可能有效,但我不保证它总是按预期工作
for (int i = 0; i < NumOfElemens; aa = a[i], bb = b[i], ++i) {
// DO SOMETHING
}
我使用 i
作为增量,使用 aa
和 bb
来存储元素。