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

问题描述

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)