QPair can not be a key in my case.
Every Data structure is identified by scope ( first QString ) and name (second QString ) and now when i want set some Data i have function:

Qt Code:
  1. class Container
  2. {
  3. public:
  4. void setData(const Data &data);
  5.  
  6. private:
  7. QHash<QString, QHash<QString, Data>> d;
  8.  
  9. };
  10.  
  11.  
  12. void Container::setData(const Data &data)
  13. {
  14. const QString scope = data.scope;
  15. const QString name = data.name;
  16.  
  17. if( d.contains(scope) ) {
  18. if( d.value(scope).contains(name) )
  19. d[scope][name] = data;
  20. else
  21. d[scope].insert(name, data);
  22. }
  23. else {
  24. d.insert(scope, QHash<QString, Data>{{name, data}});
  25. }
  26. }
To copy to clipboard, switch view to plain text mode 

and now I want allow to use this class in range for loop like that

Qt Code:
  1. Container container;
  2. for(const Data &data : container )
  3. qDebug()<< data.scope << data.name << data.value;
To copy to clipboard, switch view to plain text mode 

but if I understand you correctly it will be very difficult.