<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sort mit Zeigern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe gerade vor einer kleinen Herausforderung, mit dem Ziel mein Programm so schnell wie<br />
möglich zu machen.</p>
<p>Im Moment erhalte ich von mehreren Threads Daten, die ich in einem Thread speichere<br />
und sortiere</p>
<p>In etwa so:</p>
<pre><code>void ObjectCollected::CollectDATA(std::vector&lt;std::vector&lt;unsigned int&gt;&gt;  dataTCP)
{
	for(...)
	{
	std::vector&lt;unsigned int&gt;ALL_small;

	ALL_small.push_back(dataTCP[dat][0]);
	ALL_small.push_back(dataTCP[dat][1]);
	...
	Big_DATA.push_back(ALL_small);
	small.clear();
	}
...
}
</code></pre>
<p>und mit</p>
<p>std::sort(Big_DATA.begin(), Big_DATA.end(), [](const std::vector&lt;unsigned int&gt;&amp; a,const std::vector&lt;unsigned int&gt;&amp; b){return a[0] &lt; b[0]; });</p>
<p>sortiere ich die Daten nach der ersten variable für die weitere Verarbeitung.</p>
<p>......<br />
Nun, die eigentlich Frage. Wie kann ich mehrere Zeiger zu einem verbinden und als input für sort benutzen.</p>
<p>Den speicherplatz von dataTCP_Pointer habe ich durch dataTCP.resize schon im vorfeld<br />
reserviert.</p>
<p>also in etwa so:</p>
<pre><code>void ObjectCollected::CollectDATA(std::vector&lt;std::vector&lt;unsigned int&gt;&gt;  *dataTCP_Pointer)
{
	std::vector&lt;std::vector&lt;unsigned int&gt;&gt; *dataTCP[10];
	if(daten von 0) dataTCP[0]= dataTCP_Pointer;
	if(daten von 1) dataTCP[1]= dataTCP_Pointer;

	// sort

}
</code></pre>
<p>Ps.: über einen Beispiel code würde ich mich sehr freuen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334924/sort-mit-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 02:30:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334924.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Oct 2015 08:38:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 08:38:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe gerade vor einer kleinen Herausforderung, mit dem Ziel mein Programm so schnell wie<br />
möglich zu machen.</p>
<p>Im Moment erhalte ich von mehreren Threads Daten, die ich in einem Thread speichere<br />
und sortiere</p>
<p>In etwa so:</p>
<pre><code>void ObjectCollected::CollectDATA(std::vector&lt;std::vector&lt;unsigned int&gt;&gt;  dataTCP)
{
	for(...)
	{
	std::vector&lt;unsigned int&gt;ALL_small;

	ALL_small.push_back(dataTCP[dat][0]);
	ALL_small.push_back(dataTCP[dat][1]);
	...
	Big_DATA.push_back(ALL_small);
	small.clear();
	}
...
}
</code></pre>
<p>und mit</p>
<p>std::sort(Big_DATA.begin(), Big_DATA.end(), [](const std::vector&lt;unsigned int&gt;&amp; a,const std::vector&lt;unsigned int&gt;&amp; b){return a[0] &lt; b[0]; });</p>
<p>sortiere ich die Daten nach der ersten variable für die weitere Verarbeitung.</p>
<p>......<br />
Nun, die eigentlich Frage. Wie kann ich mehrere Zeiger zu einem verbinden und als input für sort benutzen.</p>
<p>Den speicherplatz von dataTCP_Pointer habe ich durch dataTCP.resize schon im vorfeld<br />
reserviert.</p>
<p>also in etwa so:</p>
<pre><code>void ObjectCollected::CollectDATA(std::vector&lt;std::vector&lt;unsigned int&gt;&gt;  *dataTCP_Pointer)
{
	std::vector&lt;std::vector&lt;unsigned int&gt;&gt; *dataTCP[10];
	if(daten von 0) dataTCP[0]= dataTCP_Pointer;
	if(daten von 1) dataTCP[1]= dataTCP_Pointer;

	// sort

}
</code></pre>
<p>Ps.: über einen Beispiel code würde ich mich sehr freuen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471759</guid><dc:creator><![CDATA[juri23]]></dc:creator><pubDate>Tue, 20 Oct 2015 08:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 09:14:10 GMT]]></title><description><![CDATA[<p>Wenn ich den Problem richtig verstanden habe, dann möchtest du deinen Vector von Vectoren sortieren, aber möglichst ohne Kopie zu erstellen? Dazu muss man nicht auf Pointer zurückgreifen sondern kann überall Referenzen nutzen:</p>
<pre><code>void ObjectCollected::CollectDATA(const std::vector&lt;std::vector&lt;unsigned int&gt;&gt;&amp; dataTCP)
{
  typedef std::reference_wrapper&lt;const std::vector&lt;unsigned int&gt;&gt; VecRef;
  std::vector&lt;VecRef&gt; Big_DATA(dataTCP.begin(), dataTCP.end());
  std::sort(Big_DATA.begin(), Big_DATA.end(), [](const std::vector&lt;unsigned int&gt;&amp; a, const std::vector&lt;unsigned int&gt;&amp; b) {return a[0] &lt; b[0]; });

}
</code></pre>
<p>Ein Trick hier ist die Verwendung von <a href="http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper" rel="nofollow">std::reference_wrapper</a> weil man nicht direkt einen Vector von References erstellen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471762</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 20 Oct 2015 09:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 09:44:10 GMT]]></title><description><![CDATA[<p>Der Vollständigkeit halber hier noch die Version mit Pointern:</p>
<pre><code>void CollectDATA(const std::vector&lt;std::vector&lt;unsigned int&gt;&gt;&amp; dataTCP)
{
  std::vector&lt;const std::vector&lt;unsigned int&gt;*&gt; Big_DATA(dataTCP.size());
  std::transform(dataTCP.begin(), dataTCP.end(), Big_DATA.begin(), [](const std::vector&lt;unsigned int&gt;&amp; v){ return &amp;v; });
  std::sort(Big_DATA.begin(), Big_DATA.end(), [](const std::vector&lt;unsigned int&gt;* a, const std::vector&lt;unsigned int&gt;* b) {return (*a)[0] &lt; (*b)[0]; });

}
</code></pre>
<p>Wenn man allerdings schon Pointer benutzt dann bitte nur da wo es nötig ist. Der Parameter braucht kein Pointer zu sein und du brauchst auch keine Pointer auf Vektoren von Vektoren sondern einen Vektor von Pointern auf Vektoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471768</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 20 Oct 2015 09:44:10 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 10:00:35 GMT]]></title><description><![CDATA[<p>Hi, danke für die Antwort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Heißt es dann wenn ich die Klasse so definiere:</p>
<pre><code>typedef std::reference_wrapper&lt;const std::vector&lt;unsigned int&amp;gt;&amp;gt; VecRef;
std::vector&lt;VecRef&amp;gt; CollectDATA_BIG;
</code></pre>
<p>und bei jedem Funktionsaufruf</p>
<pre><code>void ObjectCollected::CollectDATA(std::vector&lt;std::vector&lt;unsigned int&amp;gt;&amp;gt; *dataTCP)
{
...
 for(n)
 {
 CollectDATA_BIG.push_back(dataTCP[n][0]);
 }
}
</code></pre>
<p>aufrufe.</p>
<p>Dann würde die VecRef CollectDATA_BIG auf alle ankommenden vecotren verweisen, ohne eine kopie zu erstellen ?</p>
<p>So das ich nur noch CollectDATA_BIG sortieren muss.<br />
Richtig ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471769</guid><dc:creator><![CDATA[juri23]]></dc:creator><pubDate>Tue, 20 Oct 2015 10:00:35 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 10:25:49 GMT]]></title><description><![CDATA[<p>Dein CollectDATA_BIG ist eine Membervariable bzw. global? Kann man machen allerdings muss man dann aufpassen, dass die ursprünglichen Vektoren nicht zerstört werden, sonst hat man Referenzen auf gelöschte Sachen.</p>
<p>Warum hat deine Funktion jetzt schon wieder Pointer für den Parameter? Hast du wirklich ein Array von Vektoren von Vektoren? Pointer auf Arrays sind böse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471771</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 20 Oct 2015 10:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Tue, 20 Oct 2015 11:18:59 GMT]]></title><description><![CDATA[<p>@sebi707</p>
<p>vielen Dank, du hast mir sehr geholfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471774</guid><dc:creator><![CDATA[juri23]]></dc:creator><pubDate>Tue, 20 Oct 2015 11:18:59 GMT</pubDate></item><item><title><![CDATA[Reply to Sort mit Zeigern on Thu, 22 Oct 2015 09:29:47 GMT]]></title><description><![CDATA[<p>Eine Frage zu dem Thema hätte ich noch:</p>
<p>Im Moment ist es so, dass ich von mehreren threads Zeiger auf zweidimensionale Vektoren erhalte.</p>
<p>Dank deiner Hilfe habe ich eine Referenz die auf diese Zeiger verweist und nach dem ersten Parameter sortiert.<br />
Im weiteren Verlauf gehe ich mit einer Schleife die ersten Parameter durch und kopiere die Vektoren die denselben ersten Parameter haben in eine Zeile, wobei die Zeilenposition durch einen anderen Parameter definiert ist.</p>
<p>Um es besser zu verstehen hier ein Beispiel:</p>
<p>Vec1[10][13], Vec2[10][13].... auf beide verweist nun Vec3 -&gt; dieser wird nach dem ersten der 13 Parameter sortiert.</p>
<p>Dadurch haben wir so etwas wie<br />
Vec3:</p>
<p>11 0 0 0 0 0 …<br />
11 0 0 0 0 2 …<br />
11 0 0 0 0 1 …<br />
12 0 0 0 0 0…</p>
<p>Und nun wird Vec4 reserviert und abhängig von vom Parameter 6 sortiert, so dass am Ende Vec4 so ausschaut.</p>
<p>Vec4:<br />
11 0 0 0 0 0 … 11 0 0 0 0 1 … 11 0 0 0 0 2… 12 0 0 0 0 0 …</p>
<p>Das funktioniert soweit. Aber ich würde das ganze gerne beschleunigen. Also so wenig wie möglich kopieren.<br />
(Bis am Ende alles sortiert ist und ich neue Daten habe)</p>
<p>Ich habe es so wie du mit dem reference_wrapper probiert also einen neuen Vec4 erstellt aber es stand in jeder Zeile dasselbe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2472145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2472145</guid><dc:creator><![CDATA[juri23]]></dc:creator><pubDate>Thu, 22 Oct 2015 09:29:47 GMT</pubDate></item></channel></rss>