“二进制‘[’:未找到运算符
"binary '[' : no operator found
我有两个字符串向量:
std::vector<std::string> savestring{"1", "3", "2", "4"}; // some numbers
std::vector<std::string> save2{"a", "b", "c", "d"}; // some names
并且我希望在前者的基础上对后者重新排序,这样它最终就是{"a", "c", "b", "d"}
。我试过这个:
for (int i=0; i<savestring.size(); i++)
{
savestring[i] = save2[savestring[i]];
}
但我收到错误消息:
"binary '[' : no operator found which takes a right-hand operand of type 'std::basic_string<_Elem,_Traits,_Alloc>' (or there is no acceptable conversion)"
这是什么意思,我的代码有什么问题?
问题是 savestring[i]
是 std::string
而 save2[]
中的方括号内应该有一个整数。因此,解决方案是首先通过编写自定义函数将 std::string
转换为整数。
因此,将其更改为:
// Converts a std::string to an int
int ToInt( const std::string& obj )
{
std::stringstream ss;
ss << obj;
int ret;
ss >> ret;
return ret;
}
for(int i=0;i<savestring.size();i++)
{
savestring[i]=save2[ToInt(savestring[i])];
}
不要忘记在顶部写 #include <sstream>
来包含 sstream
header。
您正在保存以字符串表示的数字。在用作数组索引之前,您需要将它们转换为数字。
我有两个字符串向量:
std::vector<std::string> savestring{"1", "3", "2", "4"}; // some numbers
std::vector<std::string> save2{"a", "b", "c", "d"}; // some names
并且我希望在前者的基础上对后者重新排序,这样它最终就是{"a", "c", "b", "d"}
。我试过这个:
for (int i=0; i<savestring.size(); i++)
{
savestring[i] = save2[savestring[i]];
}
但我收到错误消息:
"binary '[' : no operator found which takes a right-hand operand of type 'std::basic_string<_Elem,_Traits,_Alloc>' (or there is no acceptable conversion)"
这是什么意思,我的代码有什么问题?
问题是 savestring[i]
是 std::string
而 save2[]
中的方括号内应该有一个整数。因此,解决方案是首先通过编写自定义函数将 std::string
转换为整数。
因此,将其更改为:
// Converts a std::string to an int
int ToInt( const std::string& obj )
{
std::stringstream ss;
ss << obj;
int ret;
ss >> ret;
return ret;
}
for(int i=0;i<savestring.size();i++)
{
savestring[i]=save2[ToInt(savestring[i])];
}
不要忘记在顶部写 #include <sstream>
来包含 sstream
header。
您正在保存以字符串表示的数字。在用作数组索引之前,您需要将它们转换为数字。