Qt wasn't initially designed with STL compatibility in mind ( in the early 2000, STL support was poor on most platforms and Qt actually predates c++98 - though QMap do not, I think). - I would argue that STL compatibility is still an issue more often than not, but it's another discussion :) As for a change in Qt6... It would result in *a lot* of hard-to-track source breakages, so I hope not ( one solution would be to offer a powerful refactoring tool).
Le dim. 16 avr. 2017 à 17:06, Mark Gaiser <[email protected]> a écrit : > 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 >
_______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
