不断收到有关类型匹配的错误.不确定这意味着什么或如何解决它
Keep getting an error about type match. Not sure what it means or how to fix it
'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'const
std::vector<_Ty>' to 'std::string &&'
1> with
1> [
1> _Ty=std::string
1> ]
1> Reason: cannot convert from 'const std::vector<_Ty>' to 'std::string'
1> with
1> [
1> _Ty=std::string
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
我的私人看起来像这样:
private:
map<string, vector<string> > mymap;
};
函数发生的错误如下所示:
void MiniSearch::NotFunction(const string q1, const string q2, vector<string>& ReturnVec) const
{
// checks for q1 and that q2 isnt in
if (mymap.find(q1) != mymap.end() && mymap.find(q2) == mymap.end())
{
// q1 in map q2 not in map else return
const vector<string>& temp = mymap.find(q1)->second;
unsigned int i = 0;
for (std::vector<string>::const_iterator it = temp.begin(); it != temp.end(); ++it)
{
if (ReturnVec.empty())
ReturnVec.push_back(*it);
else
if (i < ReturnVec.size() && ReturnVec[i] != *it)
ReturnVec.push_back(*it);
++i;;
}
}
ReturnVec.push_back(mymap.find(q1)->second); // ERROR
}
我该如何解决这个问题?我的地图没有使用正确的数据结构吗?我私下里错过了什么吗?我编写代码的方式合乎逻辑,因为对我来说只是不确定为什么它不起作用。
在这种情况下,您不希望push_back
,因为您正在尝试将一个向量附加到另一个向量。 相反,你想要这样的东西:
ReturnVec.insert(ReturnVec.end(), mymap.find(q1)->second.begin(), mymap.find(q1)->second.end());
另请注意,所有这些对mymap.find(q1)
和mymap.find(q2)
的调用都将重新搜索地图,从而增加大量的周期。 您应该考虑声明一个迭代器,并且只对每个迭代器执行一次find
:
auto q1_it = mymap.find(q1);
auto q2_it = mymap.find(q2);
或者,如果您不能执行C++11:
map< string, vector<string> >::iterator q1_it = mymap.find(q1);
map< string, vector<string> >::iterator q2_it = mymap.find(q2);
这应该会给你一个明显的性能提升。
将这些迭代器应用于我上面的答案:
ReturnVec.insert(ReturnVec.end(), q1_it->second.begin(), q1_it->second.end());
相关文章:
- 这行代码在C++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它