我想有效地比较QString和std :: string的(in)相等。哪种方法最好,可能不创建中间对象?
答案 0 :(得分:1)
QString::fromStdString()
和QString::toStdString()
浮现在脑海中,但它们会创建字符串的临时副本,所以如果您不想拥有临时对象,则必须自己编写此函数(虽然效率更高是一个问题。)
示例:
QString string="string";
std::string stdstring="string";
qDebug()<< (string.toStdString()==stdstring); // true
QString string="string";
std::string stdstring="std string";
qDebug()<< (str==QString::fromStdString(stdstring)); // false
顺便在qt5中,QString::toStdString()
现在使用QString::toUtf8()
来执行转换,因此字符串的Unicode属性不会丢失(qt-project.org/doc/qt-5.0/ qtcore / qstring.html#toStdString
答案 1 :(得分:0)
如果你绝对确定这两个字符串只包含拉丁字符,那么可以在没有中间对象的情况下完成:
bool latinCompare(const QString& qstr, const std::string& str)
{
if( qstr.length() != (int)str.size() )
return false;
const QChar* qstrData = qstr.data();
for( int i = 0; i < qstr.length(); ++i ) {
if( qstrData[i].toLatin1() != str[i] )
return false;
}
return true;
}
否则,您应该将std::string
解码为QString
并比较两个QStrings
。