find() 方法如何在 std::set<std::pair<int,int>> 中工作?

问题描述 投票:0回答:1

我正在解决LeetCode问题“路径交叉”,其中我使用

set<pair<int,int>>
,试图找出点
x,y
是否已经在路径中。但我没有得到想要的结果。

这是代码:

bool isPathCrossing(string s) {
    set <pair <int, int>> st;
    int x = 0, y = 0;
    st.insert(make_pair(x,y));
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == 'N') y++;
        else if(s[i] == 'W') x++;
        else if(s[i] == 'S') y--;
        else x--;
        pair <int, int> pr = make_pair(x, y);
        if(st.find(pr) != st.end()) return false;
        st.insert(pr);
    } 
    return true;
} 

find()
方法仅适用于
pair
的第一个元素,还是同时适用于两个元素?

c++ stl set
1个回答
0
投票

为了回答您的问题,

find()
将比较
pair
的两个元素。

您没有得到想要的结果,因为您没有遵循 LeetCode 给您的说明。

  • 您的

    return
    值是倒退的。如果循环运行找到现有点,则需要返回
    true
    ,否则如果循环退出,则返回
    false

  • 您的

    x
    坐标的移动是向后的。西向左移动,东向右移动,因此您需要在 x 上减少
     
    'W'
    ,在 
    x 上增加
    'E'
    
    

© www.soinside.com 2019 - 2024. All rights reserved.