<p>Another advantages of this approach are more efficient memory utilisation (less storage and [re]allocation overhead) somewhat better cache locality because all fields related to a particular person will be close to each other in memory instead of being spread all over the place ("somewhat better" because QString-s and similar classes will need indirections to access their contents anyway).</p>

<p>I personally would recommend not to use separate lists for closely-related data unless that's *really* neccessary.</p>
<div class="gmail_quote">On Nov 20, 2013 12:41 AM,  <<a href="mailto:andre@familiesomers.nl">andre@familiesomers.nl</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Joshua Grauman schreef op 19.11.2013 21:26:<br>
> I fairly often find myself wanting to sort a bit of data. Imagine I<br>
> have a<br>
> few QList<int>'s a QStringList's and that they correspond like a<br>
> database<br>
> table so that I always append to all the lists together with data for<br>
> one<br>
> row. Something like:<br>
><br>
> QList<int> age, height;<br>
> QStringList firstname, lastname;<br>
> while(data)<br>
> {<br>
>     age.append(getData1());<br>
>     height.append(getData2());<br>
>     firstname.append(getData3());<br>
>     lastname.append(getData4());<br>
> }<br>
><br>
> Now what if I want to sort all that data, (say by age) so that I can<br>
> print<br>
> out all the first and last names in order according to age.<br>
<br>
I think your problem is in your data structure. Instead of using<br>
separate containers for each of the fields, you should use a single<br>
container with all of the fields:<br>
<br>
struct Person<br>
{<br>
     int age;<br>
     int height;<br>
     QString firstName;<br>
     QString lastName;<br>
}<br>
<br>
QList<Person> persons;<br>
while(data)<br>
{<br>
     Person person;<br>
     person.age = getData1();<br>
     person.height = getData2();<br>
     person.firstName = getData3();<br>
     person.lastName = getData4();<br>
     persons.append(person);<br>
}<br>
<br>
Now, you can easily sort the persons list itself by using qSort with a<br>
comparison function for the field you want to sort on, or keep track of<br>
the order by using a QMap<key, int> using the index into the persons<br>
list as the value of your map.<br>
<br>
Alternatively, look into Boost.MultiIndex.<br>
<br>
André<br>
<br>
><br>
> I've tried different ways of doing this, but they all seem a bit<br>
> contrived. The best I've come up with is to have another QMap<int, int><br>
> that maps the sorting order to the indices like:<br>
><br>
> QList<int> age, height;<br>
> QStringList firstname, lastname;<br>
> QMap<int, int> order;<br>
> while(data)<br>
> {<br>
>     age.append(getData1());<br>
>     height.append(getData2());<br>
>     firstname.append(getData3());<br>
>     lastname.append(getData4());<br>
>     order[age.last()] = age.size()-1;<br>
> }<br>
><br>
> QList<int> orderedIndices = order.values();<br>
><br>
> for(int i=0; i<orderedIndices.size(); i++)<br>
> {<br>
>    print(firstname[orderedIndices[i]], lastname[orderedIndices[i]]);<br>
> }<br>
><br>
> It's not too bad. I'm not worried about performance, most of the time<br>
> these are just small amounts of data that don't warrant creating a new<br>
> class to handle, or creating a database for. I'm just wondering if<br>
> anyone<br>
> has a cleaner way of handling this? What do you do for these types of<br>
> situations?<br>
><br>
> Josh<br>
> _______________________________________________<br>
> Interest mailing list<br>
> <a href="mailto:Interest@qt-project.org">Interest@qt-project.org</a><br>
> <a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
_______________________________________________<br>
Interest mailing list<br>
<a href="mailto:Interest@qt-project.org">Interest@qt-project.org</a><br>
<a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
</blockquote></div>