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

C++中能否用vector<int>作为map的键?附LeetCode实践代码

关于C++中map使用vector作为键的问题及代码修正

核心问题解答

可以用vector<int>作为map的键,C++标准库为vector提供了默认的<比较运算符(按字典序逐个元素比较),完全满足map对键的可比较要求,所以map<vector<int>, vector<int>>、map<vector<int>, vector<vector<int>>>这类定义都是合法且可正常使用的。

你的代码问题分析

你给出的代码逻辑思路是对的,但存在一个关键疏漏:生成差值向量v后,没有将其与对应的字符串存入map。循环中只完成了v的构建,缺少m[v].push_back(i);这一步,导致map始终为空,自然无法找到符合条件的元素返回。

修正后的代码

class Solution {
public:
    string oddString(vector<string>& words) {
        map <vector<int>,vector<string>> m;
        for(auto i:words)
        {
            vector<int> v;
            for(int j=1;j<i.size();j++)
            {
                v.push_back(int(i[j]-i[j-1]));
            }
            m[v].push_back(i); // 补上这行,建立差值向量与字符串的关联
        }
        for(auto &i:m) // 加引用避免不必要的拷贝,提升效率
        {
            if(i.second.size() == 1)
            {
                return i.second[0];
            }
        }
        return "";
    }
};

额外优化提示

如果想要更高的运行效率,可以考虑使用unordered_map替代map,但标准库没有为vector<int>提供默认的哈希函数,需要自行实现;而map依赖比较运算符,使用起来更省心,完全适配本题的数据规模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20