<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>STL Vector + sort</title>
		<link>http://www.allegro.cc/forums/view/569405</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 08 Mar 2006 07:20:31 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello,</p><p>I am using vectors for my Sprite class. I was wondering how to implement sorting so that I could order my sprites using ZOrder attribute that I have given it?</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> CSprite</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>protected:</td></tr><tr><td class="number">4</td><td>  <span class="c">// Attributes</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span>  m_AnimIndex<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  <span class="k1">int</span>  m_AnimCount<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  <span class="k1">float</span> revPerSec<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">float</span> theta<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  <span class="k1">float</span> m_x<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <span class="k1">float</span> m_y<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">float</span> m_vx<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">float</span> m_vy<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">int</span> m_dx<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">int</span> m_dy<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">int</span> m_Active<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">int</span> m_ZOrder<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  <span class="k1">int</span>  m_PrevAnimation<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  vector<span class="k3">&lt;</span>CAnimation<span class="k3">*</span><span class="k3">&gt;</span>  m_Animations<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  </td></tr><tr><td class="number">23</td><td>public:</td></tr><tr><td class="number">24</td><td>  <span class="c">// Constructor</span></td></tr><tr><td class="number">25</td><td>  CSprite<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="c">// Destructor</span></td></tr><tr><td class="number">27</td><td>  <span class="k1">virtual</span> ~CSprite<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>  <span class="c">// Methodes</span></td></tr><tr><td class="number">30</td><td>  <span class="k1">void</span> Add<span class="k2">(</span>CAnimation <span class="k3">*</span>ptrAnimation<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> Input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> Render<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> Update<span class="k2">(</span><span class="k1">float</span> dt<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> ChangeAnimation<span class="k2">(</span><span class="k1">int</span> _id<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> ChangeAnimation<span class="k2">(</span>string _name<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>  <span class="k1">void</span> SetPosition<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>m_x <span class="k3">=</span> x<span class="k2">;</span> m_y <span class="k3">=</span> y<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">37</td><td>  <span class="k1">void</span> SetDirection<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>m_dx <span class="k3">=</span> x<span class="k2">;</span> m_dy <span class="k3">=</span> y<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  <span class="k1">void</span> SetVelocity<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y<span class="k2">)</span> <span class="k2">{</span>m_vx <span class="k3">=</span> x<span class="k2">;</span> m_vy <span class="k3">=</span> y<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">39</td><td>  <span class="k1">void</span> SetZOrder<span class="k2">(</span><span class="k1">int</span> z<span class="k2">)</span> <span class="k2">{</span>m_ZOrder <span class="k3">=</span> z<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">40</td><td>  <span class="k1">bool</span> Collision<span class="k2">(</span>CSprite <span class="k3">*</span>spr1, CSprite <span class="k3">*</span>spr2<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>  <span class="c">// Helpers</span></td></tr><tr><td class="number">42</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

Thanks,<br />Mariusz
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sun, 26 Feb 2006 08:04:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Overload the &lt; operator on that class. Then you can use STL&#39;s regular sort algorithm.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 26 Feb 2006 08:29:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mariuz:<br />overload with this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>a, <span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">return</span> a.m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

and sort with this:
</p><div class="source-code snippet"><div class="inner"><pre>vector<span class="k3">&lt;</span>CSprite&gt; sprites<span class="k2">;</span>
sort<span class="k2">(</span>sprites.begin<span class="k2">(</span><span class="k2">)</span>, sprites.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

it might be squirly because m_ZOrder is protected.</p><p>-----<br />I was about to post a very similar question, but more about the nature of overloading:</p><p>this is my code that does not compile:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> time_stamp_object</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> min<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> sec<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> hun_sec<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    </td></tr><tr><td class="number">8</td><td>    <span class="k1">int</span> get_length<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">int</span> num <span class="k3">=</span> hun_sec<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        num <span class="k3">+</span><span class="k3">=</span> sec<span class="k3">*</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        num <span class="k3">+</span><span class="k3">=</span> min<span class="k3">*</span><span class="n">60</span><span class="k3">*</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">return</span> num<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> time_stamp_object <span class="k3">&amp;</span>a, <span class="k1">const</span> time_stamp_object <span class="k3">&amp;</span>b<span class="k2">)</span></td></tr><tr><td class="number">18</td><td><span class="k2">{</span></td></tr><tr><td class="number">19</td><td>   <span class="k1">return</span> a.get_length<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span> b.get_length<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

for some reason it doesn&#39;t like that I&#39;m using a function (get_laugh()) to compare the two objects, and I get the errors:
</p><div class="source-code snippet"><div class="inner"><pre>main.cpp: In function `<span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> time_stamp_object<span class="k3">&amp;</span>, <span class="k1">const</span> time_stamp_object<span class="k3">&amp;</span><span class="k2">)</span><span class="s">':</span>
<span class="s">main.cpp:108: error: passing `const time_stamp_object'</span> as `<span class="k1">this</span><span class="s">' argument of `int time_stamp_object::get_length()'</span> discards qualifiers
main.cpp:108: error: passing `<span class="k1">const</span> time_stamp_object<span class="s">' as `this'</span> argument of `<span class="k1">int</span> time_stamp_object::get_length<span class="k2">(</span><span class="k2">)</span><span class="s">' discards qualifiers</span>
</pre></div></div><p>

what am I doing wrong?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 26 Feb 2006 08:35:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mark: get_length needs to be declared const, otherwise the compiler is unsure if get_length will modify the object, therefore possibly violating the const in operator&lt;&#39;s parameters.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 26 Feb 2006 09:17:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for your quick response. Well it has been ages since I have worked with operators. It apears that I have to put this outside my CSprite class, which then like you said my m_ZOrder would not be accessible, unless I make it public. Is there another way to make this operator part of my class?</p><p>Right now If I make &lt; part of CSprite I get:<br />error C2804: binary &#39;operator &lt;&#39; has too many parameters</p><p>Thanks,<br />Mariusz
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sun, 26 Feb 2006 10:00:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because it should only be one parameter, and you&#39;d do<br />this-&gt;m_ZOrder &lt; other_thing.m_ZOrder</p><p>I&#39;m not sure if it&#39;ll still complain about protected, though. If it does you&#39;ll need to create a function that returns m_ZOrder, or just move m_ZOrder to public.</p><p>EDIT:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">return</span> this-&gt;m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 26 Feb 2006 10:14:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
William: I tried adding const in front of the function but didn&#39;t work ... ??
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 26 Feb 2006 10:16:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thats right now I remember. Thanks a lot
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sun, 26 Feb 2006 10:24:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t need to overload anything if you don&#39;t want to. You can just write something like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> sprite_sorter <span class="k2">{</span>
    <span class="k1">bool</span> <span class="k1">operator</span><span class="k2">(</span><span class="k2">)</span><span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>a, <span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span> <span class="k2">{</span>
        <span class="k1">return</span> a.m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>

<span class="c">/* And then */</span>
std::sort<span class="k2">(</span>sprites.begin<span class="k2">(</span><span class="k2">)</span>, sprites.end<span class="k2">(</span><span class="k2">)</span>, sprite_sorter<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bob)</author>
		<pubDate>Sun, 26 Feb 2006 10:37:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thats cool, but I have just implemented William&#39;s suggestion and it seems that everything is working just fine. Anyhow, I really appreciate your input, it helps me to refresh my rusty C/C++ stuff.</p><p>All the best,<br />Mariusz</p><p>-----------------------------------------------------------------------------------<br />Few minutes later......<br /> <br />Wow, now I am confused. The sorting works just fine when I use QuickWatch everything is sorted as it should, but my Render function draws somehow different.</p><p>I have BG with zOrder of 1000 (background with size of full screen).<br />I have two sprites zOrder 1 and 1005</p><p>My Render function looks like this:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> CGame::Draw<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">const</span> <span class="k1">int</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_height" target="_blank"><span class="a">text_height</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">const</span> <span class="k1">int</span> c <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>  <span class="c">// Draw Sprites</span></td></tr><tr><td class="number">7</td><td>  <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>m_Buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  sprite_list::const_iterator spr<span class="k3">=</span>sprites.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">while</span> <span class="k2">(</span>spr<span class="k3">!</span><span class="k3">=</span>sprites.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> </td></tr><tr><td class="number">11</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>    <span class="k2">(</span><span class="k3">*</span>spr<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Render<span class="k2">(</span>m_Buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    spr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>m_Buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>  <span class="c">// Blit all</span></td></tr><tr><td class="number">19</td><td>  <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>m_Buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I would expect fro one sprite to be hidden behind my Background according to its ZOrder.</p><p>Any suggestions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sun, 26 Feb 2006 10:40:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>(oops wrong thread)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 26 Feb 2006 11:28:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mark: Hmm, learn something new everyday. You need to put it after the () of the function.<br />&quot;const int some_function&quot; apparently means that the result is constant, while<br />&quot;int some_function() const&quot; means that the function will not modify *this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 26 Feb 2006 11:31:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ah, thanks.  I&#39;d give a cookie if I could. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 26 Feb 2006 11:46:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
struct sprite_sorter {<br />    bool operator()(const CSprite &amp;a, const CSprite &amp;b) {<br />        return a.m_ZOrder &lt; b.m_ZOrder;<br />    }<br />};</p><p>/* And then */<br />std::sort(sprites.begin(), sprites.end(), sprite_sorter);
</p></div></div><p>
Why bother with the struct?</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;algorithm&gt;</span>

<span class="k1">static</span> <span class="k1">bool</span> comp<span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>a, <span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">return</span> a.m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span>
<span class="k2">}</span>

std::sort<span class="k2">(</span>sprites.begin<span class="k2">(</span><span class="k2">)</span>, sprites.end<span class="k2">(</span><span class="k2">)</span>, comp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

[edit]
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Right now If I make &lt; part of CSprite I get:<br />error C2804: binary &#39;operator &lt;&#39; has too many parameters
</p></div></div><p>

Make the operator &lt; take only one argument and compare whether *this &lt; the parameter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Sun, 26 Feb 2006 14:57:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would probably go with overloaded operator&lt; if maximum speed is necessary. I&#39;m not sure if functors can get inlined.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// should be inside class definition</span>
<span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>a<span class="k2">)</span> <span class="k1">const</span> 
<span class="k2">{</span>
   <span class="k1">return</span> m_ZOrder <span class="k3">&lt;</span> a.m_ZOrder<span class="k2">;</span>
<span class="k2">}</span>


<span class="c">//Somewhere in code</span>
std::sort<span class="k2">(</span>sprites.begin<span class="k2">(</span><span class="k2">)</span>, sprites.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
If I was Mark I&#39;d use this kind of code:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> time_stamp_object</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> min<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> sec<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">unsigned</span> <span class="k1">int</span> hun_sec<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    </td></tr><tr><td class="number">8</td><td>    <span class="k1">int</span> get_length<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">int</span> num <span class="k3">=</span> hun_sec<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        num <span class="k3">+</span><span class="k3">=</span> sec<span class="k3">*</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        num <span class="k3">+</span><span class="k3">=</span> min<span class="k3">*</span><span class="n">60</span><span class="k3">*</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">return</span> num<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">bool</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> time_stamp_object <span class="k3">&amp;</span>a<span class="k2">)</span> <span class="k1">const</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>        <span class="k1">return</span> get_length<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span> a.get_length<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="c">//somewhere in code</span></td></tr><tr><td class="number">22</td><td>std::sort<span class="k2">(</span>timestamps.begin<span class="k2">(</span><span class="k2">)</span>, timestamps.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
If all this code is in headers those functions should get inlined.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Sun, 26 Feb 2006 16:04:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;algorithm&gt;</span>

<span class="k1">inline</span> <span class="k1">bool</span> comp<span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>a, <span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">return</span> a.m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span>
<span class="k2">}</span>

std::sort<span class="k2">(</span>sprites.begin<span class="k2">(</span><span class="k2">)</span>, sprites.end<span class="k2">(</span><span class="k2">)</span>, comp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Any speed boost you&#39;re getting from using operator &lt; is imagined.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Tue, 28 Feb 2006 09:47:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What HoHo said. The overloaded operator should be a member func. That&#39;s why the compiler complains about the &quot;this&quot; argument.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Tue, 28 Feb 2006 13:14:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What HoHo said. The overloaded operator should be a member func. That&#39;s why the compiler complains about the &quot;this&quot; argument.
</p></div></div><p>
No, thats wrong.  A standard conforming compiler accepts both ways, one takes 2 parameters and the other only takes 1.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 02 Mar 2006 11:59:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p>I have a question in regards to STL list sorting.</p><p>This is a snap of my code that I use:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td>  CSprite <span class="k3">*</span>Background<span class="k2">;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>  CSprite <span class="k3">*</span>Player<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  CSprite <span class="k3">*</span>Alien<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>.</td></tr><tr><td class="number">8</td><td>.</td></tr><tr><td class="number">9</td><td>.</td></tr><tr><td class="number">10</td><td>  Player-&gt;SetZOrder<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  Alien-&gt;SetZOrder<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  Background-&gt;SetZOrder<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  </td></tr><tr><td class="number">14</td><td>  sprites.push_back<span class="k2">(</span>Player<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  sprites.push_back<span class="k2">(</span>Alien<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  sprites.push_back<span class="k2">(</span>Background<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  sprites.sort<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>.</td></tr><tr><td class="number">21</td><td>.</td></tr><tr><td class="number">22</td><td>.</td></tr><tr><td class="number">23</td><td>.</td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td><span class="c">//Sprite Class</span></td></tr><tr><td class="number">26</td><td><span class="k1">void</span> SetZOrder<span class="k2">(</span><span class="k1">int</span> z<span class="k2">)</span> <span class="k2">{</span>m_ZOrder <span class="k3">=</span> z<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><span class="k1">bool</span> CSprite::operator<span class="k3">&lt;</span><span class="k2">(</span><span class="k1">const</span> CSprite <span class="k3">&amp;</span>b<span class="k2">)</span></td></tr><tr><td class="number">29</td><td><span class="k2">{</span></td></tr><tr><td class="number">30</td><td>   <span class="k1">return</span> this-&gt;m_ZOrder <span class="k3">&lt;</span> b.m_ZOrder<span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Problem I am having is that Alien sprite is hidden behind Background and unless I add sprites in order Background, player, alien I have alien sprite hidden.</p><p>It appears that the sort function is not working for me. Any suggestions would be appreciated.</p><p>Thanks,<br />Mariusz
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sat, 04 Mar 2006 22:03:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is a guess, but I think you are sorting pointers, instead of objects (it&#39;s a vector of pointers to CSprite, instead of an vector of CSprite). Try adding some logging to the operator&lt; member function to see if it is actually called.</p><p>You could create a custom compare function that compares pointers to CSprite and use that as an argument to the sort algorithm. See Bob&#39;s message above.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lennaert van der linden)</author>
		<pubDate>Sun, 05 Mar 2006 02:06:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I am not exactly sure where to place Bobs code. Is the structure a part of Sprite Class, or a shared function?</p><p>Where do I call sort from, so far I get an error telling me that sort is not a member of std namespace.</p><p>error C2039: &#39;sort&#39; : is not a member of &#39;std&#39;<br />error C2275: &#39;sprite_sorter&#39; : illegal use of this type as an expression<br />        f:\Dev\App\Galaxy\Game.cpp(9) : see declaration of &#39;sprite_sorter&#39;<br />error C3861: &#39;sort&#39;: identifier not found, even with argument-dependent lookup<br />Galaxy.cpp</p><p>Thanks,<br />M.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Sun, 05 Mar 2006 03:44:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You probably forgot to #include &lt;algorithm&gt;.</p><p>I have made a small example:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;string&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;algorithm&gt; // contains std::sort</span></td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;iostream&gt;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">class</span> Sprite</td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>public:</td></tr><tr><td class="number">9</td><td>  Sprite<span class="k2">(</span> std::string <span class="k1">const</span><span class="k3">&amp;</span> name, <span class="k1">int</span> z_order <span class="k2">)</span> <span class="k2">:</span> name_<span class="k2">(</span>name<span class="k2">)</span>, z_order_<span class="k2">(</span>z_order<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">int</span> getZOrder<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> z_order_<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">void</span> print<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"sprite "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> name_ <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">12</td><td>private:</td></tr><tr><td class="number">13</td><td>  std::string name_<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">int</span> z_order_<span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="c">// compare pointer to sprites</span></td></tr><tr><td class="number">18</td><td><span class="k1">int</span> compareSprites<span class="k2">(</span> Sprite <span class="k1">const</span><span class="k3">*</span> s1, Sprite <span class="k1">const</span><span class="k3">*</span> s2 <span class="k2">)</span> </td></tr><tr><td class="number">19</td><td><span class="k2">{</span> </td></tr><tr><td class="number">20</td><td>  <span class="k1">return</span> s1-&gt;getZOrder<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span> s2-&gt;getZOrder<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">24</td><td><span class="k2">{</span></td></tr><tr><td class="number">25</td><td>  std::vector<span class="k3">&lt;</span>Sprite<span class="k3">*</span><span class="k3">&gt;</span> ps<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  ps.push_back<span class="k2">(</span> <span class="k1">new</span> Sprite<span class="k2">(</span> <span class="s">"player"</span>, <span class="n">2</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  ps.push_back<span class="k2">(</span> <span class="k1">new</span> Sprite<span class="k2">(</span> <span class="s">"alien"</span>, <span class="n">1</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  ps.push_back<span class="k2">(</span> <span class="k1">new</span> Sprite<span class="k2">(</span> <span class="s">"background"</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>  </td></tr><tr><td class="number">31</td><td>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"unsorted:"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  std::for_each<span class="k2">(</span> ps.begin<span class="k2">(</span><span class="k2">)</span>, ps.end<span class="k2">(</span><span class="k2">)</span>, std::mem_fun<span class="k2">(</span> <span class="k3">&amp;</span>Sprite::print <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>  std::sort<span class="k2">(</span> ps.begin<span class="k2">(</span><span class="k2">)</span>, ps.end<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\nsorted by pointer address:"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>  std::for_each<span class="k2">(</span> ps.begin<span class="k2">(</span><span class="k2">)</span>, ps.end<span class="k2">(</span><span class="k2">)</span>, std::mem_fun<span class="k2">(</span> <span class="k3">&amp;</span>Sprite::print <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>  std::sort<span class="k2">(</span> ps.begin<span class="k2">(</span><span class="k2">)</span>, ps.end<span class="k2">(</span><span class="k2">)</span>, compareSprites <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\nsorted by z-order (using compareSprites):"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>  std::for_each<span class="k2">(</span> ps.begin<span class="k2">(</span><span class="k2">)</span>, ps.end<span class="k2">(</span><span class="k2">)</span>, std::mem_fun<span class="k2">(</span> <span class="k3">&amp;</span>Sprite::print <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lennaert van der linden)</author>
		<pubDate>Sun, 05 Mar 2006 05:05:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you, I will check this as soon I have a chance.</p><p>M.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Wed, 08 Mar 2006 07:20:31 +0000</pubDate>
	</item>
</rss>
