On Sun, Apr 16, 2017 at 4:44 PM, Corentin <[email protected]> wrote: > Funny, a friend at kdab asked me about that exact question a few minutes > ago. > The reason for the difference is most certainly an historical one ( and > can't be changed because it would break quite a bit of code ). > > If you want the same behavior, you can create a proxy for your associative > container instance, with a custom iterator whose operator*() returns a std > pair ( or a QPair ) - quite a bit of boilterplate code.
It probably does come down to historic reasons, but that would be strange as well. I doubt that the C++ committee changed what is returned by operator*() (correct me if i'm wrong) so i'm inclined to think that the std::<container> stuff is returning it as an std::pair for quite a while now. That again makes me wonder, why did Qt diverge from that? And... if Qt plans to change it in Qt6? > > > > > Le dim. 16 avr. 2017 à 15:57, Mark Gaiser <[email protected]> a écrit : >> >> Hi, >> >> Take this simple example: >> >> QHash<int, QString> test = { >> {10, "aaa"}, >> {20, "bbb"}, >> {30, "ccc"} >> }; >> >> for (const auto &entry: qAsConst(test)) { >> qDebug() << entry; >> } >> >> It returns: >> "aaa" >> "ccc" >> "bbb" >> >> and the std::unordered_map version: >> std::unordered_map<int, QString> test = { >> {10, "aaa"}, >> {20, "bbb"}, >> {30, "ccc"} >> }; >> >> for (const auto &entry: test) { >> qDebug() << entry; >> } >> >> it returns: >> std::pair(30,"ccc") >> std::pair(10,"aaa") >> std::pair(20,"bbb") >> >> As you can see, the QHash iteration directly returns the value. The >> std::unordered_map returns a std::par with the key and value for the >> current iteration (in it's respective first and second members). Both >> approaches probably have arguments in favor and against. What i'm >> curious about is why there is a difference at all? >> >> I'm curious because the behavior is a bit unexpected when compared to >> std::unordered_map. I would have guessed QHash to follow the same >> logic as std::unordered_map, only with a Qt syntax. So for instance a >> return of QPair(...), not the value directly. >> >> Thanks, >> Mark >> _______________________________________________ >> Development mailing list >> [email protected] >> http://lists.qt-project.org/mailman/listinfo/development _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
