You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::set<std::pair<int,int>>中find()的工作机制及代码问题排查

问题解答

关于std::set<std::pair<int,int>>::find()的匹配规则

std::set<std::pair<int,int>>的find()方法会同时匹配pair的两个元素。std::pair的默认比较逻辑是:先比较第一个元素,若第一个元素相等,再比较第二个元素,只有当两个元素完全相等时,才会判定为同一个元素,find()才会找到对应的迭代器。

你的代码问题所在

你的代码存在两处关键逻辑错误:

  1. 方向坐标修改搞反:
    • 方向'W'(西)对应x坐标减小,应改为x--,而非x++
    • 方向'E'(东)对应x坐标增大,应改为x++,而非x--
  2. 返回值逻辑错误:LeetCode「Path Crossing」问题要求路径交叉时返回true,你原代码在找到重复坐标时返回false,逻辑完全相反。

修正后的代码如下:

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 true;
        st.insert(pr);
    } 
    return false;
}

内容的提问来源于stack exchange,提问作者Atmaram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:42