<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7651.12">
<TITLE>答复: [Development] 答复:  答复:  [Qt-interest] QMultiHash</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>values(key) returns a list of all the values with the key.<BR>
<BR>
remove(key) removes all the values for key.<BR>
<BR>
Then reinsert new values for key.<BR>
<BR>
But why do you want to put the same <key,value> pair multiple times?<BR>
<BR>
martin<BR>
________________________________<BR>
From: development-bounces+martin.smith=digia.com@qt-project.org [development-bounces+martin.smith=digia.com@qt-project.org] on behalf of pengliang(彭亮) [pengliang@founder.com]<BR>
Sent: Thursday, March 07, 2013 12:51 PM<BR>
To: Danny Koppel; pengliang(??); development@qt-project.org<BR>
Subject: [Development] 答复: 答复: [Qt-interest] QMultiHash<BR>
<BR>
<BR>
hi<BR>
<BR>
QMultiHash<QString,long>;<BR>
it allow you to insert some same keys,<BR>
i have to find some string whether exist in the hash,<BR>
if exist, then set values of hash to 0.<BR>
<BR>
--------------------<BR>
my program is used to remove duplicate rows in two files.<BR>
so, i read file1 to QMultiHash<QString,long>hash, qstring are content of rows, long are index of rows,<BR>
when i read one row in file2, i have to check whether hash has this row, if yes, i set the values of hash to 0(ignore these rows), else write this row to a new file.<BR>
<BR>
then, create QMultiMap<long,QString>map, insert hash to map, and loop map write QString to another new file.<BR>
<BR>
<BR>
---------------------<BR>
who has a good advice?<BR>
<BR>
<BR>
thanks<BR>
ken<BR>
<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Danny Koppel [<A HREF="mailto:D.Koppel@skf-rif.nl">mailto:D.Koppel@skf-rif.nl</A>]<BR>
Sent: 2013-3-7 (星期四) 18:11<BR>
To: 'pengliang(??)'; development@qt-project.org<BR>
Subject: RE: [Development] 答复:  [Qt-interest] QMultiHash<BR>
<BR>
Hi,<BR>
<BR>
If you always use replace, there won’t be double keys.<BR>
This is depending on your implementation.<BR>
<BR>
Other option:<BR>
Use the find() method on the class.<BR>
Then  use an iterator on the results to assign the new value.<BR>
<BR>
But if I read your mail, you suggest that you always replace ALL values with the same key.<BR>
(Then I would like to know why you have double keys at all?!)<BR>
So then I would just use replace. Then the key will occur only once.<BR>
<BR>
I’m working with assumptions, so that’s why I ‘offer’ two solutions.<BR>
<BR>
Kind regards,<BR>
Danny<BR>
<BR>
Van: development-bounces+d.koppel=skf-rif.nl@qt-project.org [<A HREF="mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org">mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org</A>] Namens pengliang(??)<BR>
Verzonden: donderdag 7 maart 2013 10:59<BR>
Aan: Danny Koppel; development@qt-project.org<BR>
Onderwerp: [Development] 答复: [Qt-interest] QMultiHash<BR>
<BR>
Hi<BR>
1.<BR>
QmultiHash replace() is only replace first item, I want to replace all values when key is matched.<BR>
Qt docs : if there are multiple items with the key, the most recently inserted item's value is replaced with value.<BR>
Who have a better method?<BR>
<BR>
2.     so I need to use Qmap<long,Qstring>,<BR>
I found qt source code below, so I think Qhash<long,Qstring> is ordered by long, am I right?<BR>
inline uint qHash(long key) { return qHash(ulong(key)); }<BR>
template <class T> inline uint qHash(const T *key)<BR>
{<BR>
    return qHash(reinterpret_cast<quintptr>(key));<BR>
}<BR>
<BR>
Thanks<BR>
Ken<BR>
<BR>
<BR>
________________________________<BR>
发件人: Danny Koppel [<A HREF="mailto:D.Koppel@skf-rif.nl">mailto:D.Koppel@skf-rif.nl</A>]<BR>
发送时间: 2013年3月7日 17:39<BR>
收件人: 'pengliang(??)'; development@qt-project.org<<A HREF="mailto:development@qt-project.org">mailto:development@qt-project.org</A>><BR>
主题: RE: [Development] [Qt-interest] QMultiHash<BR>
<BR>
Hello,<BR>
<BR>
I don’t know if I understand you correctly but the QMultiHash class has the function replace which does what you describe.<BR>
It replaces the value of an existing key or creates a new one if the key doesn’t exist yet.<BR>
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.”.<BR>
<BR>
Kind regards,<BR>
Danny<BR>
<BR>
Van: development-bounces+d.koppel=skf-rif.nl@qt-project.org<<A HREF="mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org">mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org</A>> [<A HREF="mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org">mailto:development-bounces+d.koppel=skf-rif.nl@qt-project.org</A>] Namens pengliang(??)<BR>
Verzonden: donderdag 7 maart 2013 10:25<BR>
Aan: development@qt-project.org<<A HREF="mailto:development@qt-project.org">mailto:development@qt-project.org</A>><BR>
Onderwerp: [Development] [Qt-interest] QMultiHash<BR>
<BR>
Hi All<BR>
<BR>
QMultiHash<Qstring,int>hh;<BR>
I need to find some key and change their values.<BR>
I found If I use QmutableHashIterator<Qstring,int>it , its<BR>
bool<BR>
<BR>
findNext<qmutablehashiterator.html#findNext> ( const T & value )<BR>
<BR>
Its parameter is a value, not a key.<BR>
So I need to :<BR>
While(it.hasNext())<BR>
{<BR>
It.next();<BR>
If(it.key() == ikey)<BR>
{<BR>
It.setValue(ivalue);<BR>
}<BR>
}<BR>
<BR>
I must to check every item? Who have a better method?<BR>
<BR>
2. Qhash:<BR>
Some books said Qhash is unorderred?<BR>
But I test it.<BR>
Qhash<Qstring,int>hh;<BR>
I insert some string, and loop the hash by QhashIterator, I found the string is orderred.<BR>
And I test it Qhash<int,Qstring>, and print key, and found they still orderred.<BR>
Why books said it is unorderred?<BR>
<BR>
<BR>
Thanks<BR>
<BR>
ken<BR>
<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>