QMap :: contains () no devolver el valor esperado
Pregunta
Tengo una clase que contiene un objeto QMap:
QMap<QString, Connection*> users;
Ahora, en la siguiente función Foo (), el si cláusula siempre devuelve falsa pero cuando iterar a través del mapa, la comparación QString, es decir, str1 está presente en las llaves.
void Foo(QString& str1, QString& str2)
{
if(users.contains(str1))
users[str1]->doStuff(str2);
else
{
for(QMap<QString, Connection>::iterator iter = users.begin();
iter!= users.end();iter++)
qDebug()<<iter.key();
}
}
¿Estoy haciendo algo mal? ¿Por qué no contiene () return true?
Solución
Con Unicode, dos cadenas se puede volver el mismo, pero en realidad sea diferente. Si se asume que es el caso que querrá normalizar las cuerdas primera :
str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
// do something useful
Por supuesto, necesitará para normalizar la cadena antes de colocarlo en sus usuarios un mapa también.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow