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

C++编译错误:type 'set<int>' does not provide a subscript operator 求助

问题排查与修复

编译错误原因

C++的set<int>是有序关联容器,底层基于红黑树实现,不属于随机访问容器,因此不支持通过[]下标运算符直接访问元素,这就是你遇到type 'set<int>' does not provide a subscript operator错误的原因。

修正后的代码

你可以通过迭代器遍历set,或者使用范围for循环来读取元素并重新填充到nums中:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        set<int> s;

        for(int num : nums) {
            s.insert(num);
        }

        nums.clear();

        // 使用迭代器遍历set
        for(auto it = s.begin(); it != s.end(); ++it) {
            nums.push_back(*it);
        }

        return s.size();
    }
};

或者用更简洁的写法直接利用容器迭代器初始化和赋值:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        set<int> s(nums.begin(), nums.end());

        nums.assign(s.begin(), s.end());

        return s.size();
    }
};

额外优化提示

因为题目给出的是有序数组,其实不需要借助set,用双指针法可以达到O(n)时间复杂度且O(1)空间复杂度,更符合题目隐含的性能要求:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.empty()) return 0;

        int idx = 0;
        for(int i = 1; i < nums.size(); ++i) {
            if(nums[i] != nums[idx]) {
                nums[++idx] = nums[i];
            }
        }

        return idx + 1;
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:35:00