问题描述
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;
}
};
有了上面的代码,我想问两个问题:
- 对于
int sz = min(m[s].size(),3)
,我得到“没有匹配的函数调用‘min’”。我假设这是因为 sz 不是整数?那怎么样?m[s].size()
不是整数 m[s] 集合的大小吗? - 对于
vector<string> in(m[s].begin(),m[s].begin() + sz)
,忘记 sz 无效,即使我只想通过执行in(m[s].begin(),m[s].begin() + 3)
将 m[s] 中的前三个元素复制到 vector in,它也会给我“无效二进制表达式的操作数”。如果我只想复制前 3 个元素,该怎么办?
解决方法
- 我得到了“没有匹配的函数来调用‘min’”,这是怎么回事?
这意味着您没有使用这样的名称声明函数 - 或者至少,您没有使用参数可以隐式转换为的参数声明这样的函数。
m[s].size() 不是整数 m[s] 集合的大小吗?
是的。
- 它会给我“二进制表达式的无效操作数”
这是因为集合迭代器不是随机访问迭代器,因此它们不支持加法运算符。
我该怎么办
你可以做it + 3
而不是std::next(it,3)
。