如何解决关于地图和向量迭代器内设置大小的问题
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)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。