C++ 无法进入while循环。这与使用无序地图有关吗?
我试图做一个编码挑战,我们必须缩短和减少方向指示。在实现while循环之前,我使用的是无序映射。代码的其余部分按预期工作,但无法到达while循环,因此无法输出适当的值C++ 无法进入while循环。这与使用无序地图有关吗?,c++,loops,c++11,enums,hashmap,C++,Loops,C++11,Enums,Hashmap,我试图做一个编码挑战,我们必须缩短和减少方向指示。在实现while循环之前,我使用的是无序映射。代码的其余部分按预期工作,但无法到达while循环,因此无法输出适当的值 std::vector<std::string> dirReduc(std::vector <std::string>& arr) { enum Direction { NORTH = 1, SOUTH = -1, EAST = 1, WEST =
std::vector<std::string> dirReduc(std::vector <std::string>& arr)
{
enum Direction
{
NORTH = 1, SOUTH = -1,
EAST = 1, WEST = -1
};
int x=0, y=0;
std::unordered_map<std::string, Direction> uMapDir = { {"North",NORTH},{"NORTH",NORTH},
{"South",SOUTH},{"SOUTH",SOUTH},
{"East",EAST},{"EAST",EAST},
{"West",WEST},{"WEST",WEST} };
for (std::vector<std::string> ::const_iterator i =arr.begin(); i!=arr.end() ; i ++)
{
if ((*i=="North")||(*i == "NORTH")||(*i=="South")|| (*i == "SOUTH"))
{
y += uMapDir[*i];
}
else
{
x += uMapDir[*i];
}
}
std::vector<std::string> outPutArr;
while ((x!=0)&&(y!=0))
{
if (x<0)
{
x++;
outPutArr.push_back("WEST");
}
else
{
x--;
outPutArr.push_back("EAST");
}
if (y < 0)
{
y++;
outPutArr.push_back("SOUTH");
}
else
{
y--;
outPutArr.push_back("NORTH");
}
}
return outPutArr;
}
std::vector dirreduce(std::vector&arr)
{
枚举方向
{
北=1,南=1,
东=1,西=1
};
int x=0,y=0;
无序地图uMapDir={{“北”,北},{“北”,北},
{“南”,南},{“南”,南},
{“东”,东},{“东”,东},
{“西”,西},{“西”,西};
for(std::vector::const_迭代器i=arr.begin();i!=arr.end();i++)
{
如果((*i==“北”)| |(*i==“北”)| |(*i==“南”)| |(*i==“南”))
{
y+=uMapDir[*i];
}
其他的
{
x+=uMapDir[*i];
}
}
std::向量输出;
而((x!=0)和&(y!=0))
{
如果(x你的问题是你试图在同一个循环中同时执行x
和y
。这意味着每个循环都必须向后推一个东或西和向后推一个南或北。但这没有任何意义。如果每个循环的数量都不相同呢
相反,您应该使用两个循环:
while (x)
{
if (x<0)
{
x++;
outPutArr.push_back("WEST");
}
else
{
x--;
outPutArr.push_back("EAST");
}
}
while(y) {
if (y < 0)
{
y++;
outPutArr.push_back("SOUTH");
}
else
{
y--;
outPutArr.push_back("NORTH");
}
}
while(x)
{
如果(x你的问题是你试图在同一个循环中同时执行x
和y
。这意味着每个循环都必须向后推一个东或西和向后推一个南或北。但这没有任何意义。如果每个循环的数量都不相同呢
相反,您应该使用两个循环:
while (x)
{
if (x<0)
{
x++;
outPutArr.push_back("WEST");
}
else
{
x--;
outPutArr.push_back("EAST");
}
}
while(y) {
if (y < 0)
{
y++;
outPutArr.push_back("SOUTH");
}
else
{
y--;
outPutArr.push_back("NORTH");
}
}
while(x)
{
如果(XBooff:把所有输入转换成一个单独的情况,那么你必须处理更少的测试。注意:对于这样少的元素,<代码> unordeDeMAP 可能比线性搜索慢。特别是当你考虑<代码>如果((* i==“北方”)*(*i==“北”)*(*i==“南”)*(* i==“南”))
已经完成了大部分工作。@user4581301测试用例包括两个变量,你是说如果语句可以的话,嵌套会更快。无序映射
更聪明,但是这些智能需要克服启动成本。我会用无序映射
来实现类似的代码更简单,但它将是一个字符串到在找到字符串时要调用的函数的映射。这意味着您只有一次查找,该函数将为该特定方向执行所有其他工作。建议:将所有输入转换为一个单独的大小写,以便您必须处理较少的测试。注意:对于如此少的元素,无序的\u映射
可能比线性搜索慢,特别是当你考虑<代码>如果((* i==“北”)*(*i==“北方”)*(*i==“南”)*(* i==“南”))
已经完成了大部分工作。@user4581301测试用例包括两个变量,你是说如果语句可以的话,嵌套会更快。无序映射
更聪明,但是这些智能需要克服启动成本。我会用无序映射
来实现类似的代码更简单,但它将是一个字符串到在找到字符串时要调用的函数的映射。这意味着您只需进行一次查找,该函数将为该特定方向执行所有其他工作。