QMap::contains() 未返回预期值

发布于 2024-09-28 08:48:54 字数 551 浏览 3 评论 0原文

我有一个包含 QMap 对象的类:

QMap<QString, Connection*> users;

现在,在下面的函数 Foo() 中,if 子句总是返回 false,但是当我迭代映射时,比较的 QString(即 str1)出现在键中。

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();
    }
}

我做错了什么吗?为什么 contains() 不返回 true ?

I have a class that contains a QMap object:

QMap<QString, Connection*> users;

Now, in the following function Foo(), the if clause always returns false but when I iterate through the map, the compared QString, i.e., str1 is present in the keys.

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();
    }
}

Am I doing something wrong? Why doesn't contains() return true ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

給妳壹絲溫柔 2024-10-05 08:48:54

使用 unicode,两个字符串可能呈现相同但实际上不同。假设是这种情况,您需要首先规范化字符串:

str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
    // do something useful

当然,在将字符串放入用户映射之前,您还需要对其进行规范化。

With unicode, two strings may be rendered the same but actually be different. Assuming that's the case you'll want to normalize the strings first:

str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
    // do something useful

Of course, you'll need to normalize the string before you put it in your users map as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文