[Development] 答复: [Qt-interest] QMultiHash

2013-03-07 Thread 彭亮
Hi

1.

QmultiHash replace() is only replace first item, I want to replace all values 
when key is matched.

Qt docs : if there are multiple items with the key, the most recently inserted 
item's value is replaced with value.

Who have a better method?

 

2.   so I need to use Qmaplong,Qstring,

I found qt source code below, so I think Qhashlong,Qstring is ordered by 
long, am I right?

inline uint qHash(long key) { return qHash(ulong(key)); }

template class T inline uint qHash(const T *key)

{

return qHash(reinterpret_castquintptr(key));

}

 

Thanks

Ken

 

 



发件人: Danny Koppel [mailto:d.kop...@skf-rif.nl] 
发送时间: 2013年3月7日 17:39
收件人: 'pengliang(??)'; development@qt-project.org
主题: RE: [Development] [Qt-interest] QMultiHash

 

Hello,

 

I don’t know if I understand you correctly but the QMultiHash class has the 
function replace which does what you describe.

It replaces the value of an existing key or creates a new one if the key 
doesn’t exist yet.

About point 2: the documentation describes it as follows: “When iterating over 
a QMap qthelp://org.qt-project.qtcore.501/qtcore/qmap.html , the items are 
always sorted by key. With QHash, the items are arbitrarily ordered.”.

 

Kind regards,

Danny 

 

Van: development-bounces+d.koppel=skf-rif...@qt-project.org 
[mailto:development-bounces+d.koppel=skf-rif...@qt-project.org] Namens 
pengliang(??)
Verzonden: donderdag 7 maart 2013 10:25
Aan: development@qt-project.org
Onderwerp: [Development] [Qt-interest] QMultiHash

 

Hi All

 

QMultiHashQstring,inthh;

I need to find some key and change their values.

I found If I use QmutableHashIteratorQstring,intit , its 

bool

findNext ( const T  value )

Its parameter is a value, not a key.

So I need to :

While(it.hasNext())

{

It.next();

If(it.key() == ikey)

{

It.setValue(ivalue);
}

}

 

I must to check every item? Who have a better method?

 

2. Qhash:

Some books said Qhash is unorderred?

But I test it.

QhashQstring,inthh;

I insert some string, and loop the hash by QhashIterator, I found the string is 
orderred.

And I test it Qhashint,Qstring, and print key, and found they still orderred.

Why books said it is unorderred?

 

 

Thanks

ken

 

___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] 答复: [Qt-interest] QMultiHash

2013-03-07 Thread Tomasz Siekierda
On 7 March 2013 10:58, pengliang(彭亮) pengli...@founder.com wrote:
 2.   so I need to use Qmaplong,Qstring,

 I found qt source code below, so I think Qhashlong,Qstring is ordered by
 long, am I right?

That's probably just the hash value. As far as you - user - are
concerned, this is arbitrarily ordered.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] 答复: [Qt-interest] QMultiHash

2013-03-07 Thread Danny Koppel
Hi,

If you always use replace, there won’t be double keys.
This is depending on your implementation.

Other option:
Use the find() method on the class.
Then  use an iterator on the results to assign the new value.

But if I read your mail, you suggest that you always replace ALL values with 
the same key.
(Then I would like to know why you have double keys at all?!)
So then I would just use replace. Then the key will occur only once.

I’m working with assumptions, so that’s why I ‘offer’ two solutions.

Kind regards,
Danny

Van: development-bounces+d.koppel=skf-rif...@qt-project.org 
[mailto:development-bounces+d.koppel=skf-rif...@qt-project.org] Namens 
pengliang(??)
Verzonden: donderdag 7 maart 2013 10:59
Aan: Danny Koppel; development@qt-project.org
Onderwerp: [Development] 答复: [Qt-interest] QMultiHash

Hi
1.
QmultiHash replace() is only replace first item, I want to replace all values 
when key is matched.
Qt docs : if there are multiple items with the key, the most recently inserted 
item's value is replaced with value.
Who have a better method?

2. so I need to use Qmaplong,Qstring,
I found qt source code below, so I think Qhashlong,Qstring is ordered by 
long, am I right?
inline uint qHash(long key) { return qHash(ulong(key)); }
template class T inline uint qHash(const T *key)
{
return qHash(reinterpret_castquintptr(key));
}

Thanks
Ken



发件人: Danny Koppel [mailto:d.kop...@skf-rif.nl]
发送时间: 2013年3月7日 17:39
收件人: 'pengliang(??)'; 
development@qt-project.orgmailto:development@qt-project.org
主题: RE: [Development] [Qt-interest] QMultiHash

Hello,

I don’t know if I understand you correctly but the QMultiHash class has the 
function replace which does what you describe.
It replaces the value of an existing key or creates a new one if the key 
doesn’t exist yet.
About point 2: the documentation describes it as follows: “When iterating over 
a QMapqthelp://org.qt-project.qtcore.501/qtcore/qmap.html, the items are 
always sorted by key. With QHash, the items are arbitrarily ordered.”.

Kind regards,
Danny

Van: 
development-bounces+d.koppel=skf-rif...@qt-project.orgmailto:development-bounces+d.koppel=skf-rif...@qt-project.org
 [mailto:development-bounces+d.koppel=skf-rif...@qt-project.org] Namens 
pengliang(??)
Verzonden: donderdag 7 maart 2013 10:25
Aan: development@qt-project.orgmailto:development@qt-project.org
Onderwerp: [Development] [Qt-interest] QMultiHash

Hi All

QMultiHashQstring,inthh;
I need to find some key and change their values.
I found If I use QmutableHashIteratorQstring,intit , its
bool

findNextqmutablehashiterator.html#findNext ( const T  value )

Its parameter is a value, not a key.
So I need to :
While(it.hasNext())
{
It.next();
If(it.key() == ikey)
{
It.setValue(ivalue);
}
}

I must to check every item? Who have a better method?

2. Qhash:
Some books said Qhash is unorderred?
But I test it.
QhashQstring,inthh;
I insert some string, and loop the hash by QhashIterator, I found the string is 
orderred.
And I test it Qhashint,Qstring, and print key, and found they still orderred.
Why books said it is unorderred?


Thanks

ken

___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development