微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于地图和向量迭代器内设置大小的问题

如何解决关于地图和向量迭代器内设置大小的问题

class Solution {
public:
    vector<vector<string>> suggestedProducts(vector<string>& products,string searchWord) {
        vector<vector<string>> res;
        map<string,set<string>> m;
        for (auto p : products) {
            for (int i = 1; i <= min(p.size(),searchWord.size()); ++i) {
                m[p.substr(0,i)].insert(p);
            }
        }
        for (int i = 1; i <= searchWord.size(); ++i) {
            string s = searchWord.substr(0,i);
            int sz = min(m[s].size(),3);
            vector<string> in(m[s].begin(),m[s].begin() + sz);
            res.push_back(out);
        }
        return res;
    }
};

有了上面的代码,我想问两个问题:

  1. 对于 int sz = min(m[s].size(),3),我得到“没有匹配的函数调用‘min’”。我假设这是因为 sz 不是整数?那怎么样? m[s].size() 不是整数 m[s] 集合的大小吗?
  2. 对于 vector<string> in(m[s].begin(),m[s].begin() + sz),忘记 sz 无效,即使我只想通过执行 in(m[s].begin(),m[s].begin() + 3) 将 m[s] 中的前三个元素复制到 vector in,它也会给我“无效二进制表达式的操作数”。如果我只想复制前 3 个元素,该怎么办?

解决方法

  1. 我得到了“没有匹配的函数来调用‘min’”,这是怎么回事?

这意味着您没有使用这样的名称声明函数 - 或者至少,您没有使用参数可以隐式转换为的参数声明这样的函数。

m[s].size() 不是整数 m[s] 集合的大小吗?

是的。

  1. 它会给我“二进制表达式的无效操作数”

这是因为集合迭代器不是随机访问迭代器,因此它们不支持加法运算符。

我该怎么办

你可以做it + 3而不是std::next(it,3)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。