<?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[In std::sort Funktor auf andere Klassen zugreifen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgendes Szenario:</p>
<pre><code>class Money
{
	public:
		int value;
		Money(int value_) : value(value_) {};
};

struct MoneyComparator
{
	bool operator()(Money const &amp;first, Money const &amp;second) const
	{
		return first.value &lt; second.value; // Hier würde ich gerne random_money aufrufen um es in den Vergleich mit einzubeziehen
	}
};

class MoneyBag
{
	public:
		MoneyBag(std::vector&lt;Money&gt; much_money_) : much_money(much_money_) {};
		void sort_money() { std::sort(much_money.begin(), much_money.end(), MoneyComparator()); };
		std::vector&lt;Money&gt; much_money;

	private:
		int random_money() { return 1; }; // Vereinfacht
};

int _tmain(int argc, _TCHAR* argv[])
{
	MoneyBag my_money_bag(std::vector&lt;Money&gt;{5, 3, 8, 1, 2, 4});

	my_money_bag.sort_money(); // Hier soll sortiert werden
}
</code></pre>
<p>Wie löse ich das dann am besten? Also ich hab quasi eine Klasse Geldbeutel die einen std::vector&lt;Geld&gt; enthält. Dieser vector soll sortiert werden. Allerdings will ich in der Sortiermethode auch noch auf eine Funktion der Geldbeutel-Klasse zugreifen (random_money), welche mir dort aber nicht zur Verfügung steht...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325272/in-std-sort-funktor-auf-andere-klassen-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 00:51:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325272.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Apr 2014 14:16:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 14:17:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgendes Szenario:</p>
<pre><code>class Money
{
	public:
		int value;
		Money(int value_) : value(value_) {};
};

struct MoneyComparator
{
	bool operator()(Money const &amp;first, Money const &amp;second) const
	{
		return first.value &lt; second.value; // Hier würde ich gerne random_money aufrufen um es in den Vergleich mit einzubeziehen
	}
};

class MoneyBag
{
	public:
		MoneyBag(std::vector&lt;Money&gt; much_money_) : much_money(much_money_) {};
		void sort_money() { std::sort(much_money.begin(), much_money.end(), MoneyComparator()); };
		std::vector&lt;Money&gt; much_money;

	private:
		int random_money() { return 1; }; // Vereinfacht
};

int _tmain(int argc, _TCHAR* argv[])
{
	MoneyBag my_money_bag(std::vector&lt;Money&gt;{5, 3, 8, 1, 2, 4});

	my_money_bag.sort_money(); // Hier soll sortiert werden
}
</code></pre>
<p>Wie löse ich das dann am besten? Also ich hab quasi eine Klasse Geldbeutel die einen std::vector&lt;Geld&gt; enthält. Dieser vector soll sortiert werden. Allerdings will ich in der Sortiermethode auch noch auf eine Funktion der Geldbeutel-Klasse zugreifen (random_money), welche mir dort aber nicht zur Verfügung steht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395966</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 23 Apr 2014 14:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 14:36:06 GMT]]></title><description><![CDATA[<p>Gib <code>MoneyComparator</code> einen Konstruktor, dem Du eine Referenz auf dein <code>MoneyBag</code> mitgibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395972</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 23 Apr 2014 14:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 14:55:49 GMT]]></title><description><![CDATA[<p>Ok, also ich habs jetzt so probiert und der Compiler meckert von wegen <em>Verwendung des undefinierten Typs &quot;MoneyBag&quot;</em>, wohl wegen der Vorwärtsdeklaration. Dabei verwende ich doch schon einen Pointer in der Sortier-Methode?</p>
<pre><code>class Money
{
public:
	int value;
	Money(int value_) : value(value_) {};
};

class MoneyBag;

struct MoneyComparator
{
	MoneyComparator(MoneyBag *container_) : container(container_) {};
	bool operator()(Money const &amp;first, Money const &amp;second) const
	{
		return first.value + container-&gt;random_money() &lt; second.value + container-&gt;random_money();
	}
	MoneyBag *container;
};

class MoneyBag
{
public:
	MoneyBag(std::vector&lt;Money&gt; much_money_) : much_money(much_money_) {};
	void sort_money() { std::sort(much_money.begin(), much_money.end(), MoneyComparator(this)); };
	std::vector&lt;Money&gt; much_money;

	int random_money() { return 1; }; // Vereinfacht
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395975</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 23 Apr 2014 14:55:49 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 15:06:49 GMT]]></title><description><![CDATA[<p>Hilft es, die Definition von <code>bool MoneyComparator::operator()()</code> unter die Definition von <code>class MoneyBag{}</code> zu ziehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395977</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 23 Apr 2014 15:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 17:50:16 GMT]]></title><description><![CDATA[<p>Tasächlich, damit klappt es dann <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>Auch wenn ich nicht verstehe warum... die Methode ist doch jetzt unter allen anderen Deklariert, wie das helfen kann kapier ich nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395993</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 23 Apr 2014 17:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 17:58:18 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>... die Methode ist doch jetzt unter allen anderen <s>Deklariert</s></p>
</blockquote>
<p>Definiert</p>
<p>Sie benutzt die Methode <code>MoneyBag::random_money()</code> , und die war an der alten Stelle noch nicht bekannt(nur eine Forwärtsdeklaration von <code>class MoneyBag</code> , keine Details)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395996</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 23 Apr 2014 17:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 18:57:43 GMT]]></title><description><![CDATA[<p>Wie wäre es einfach mit einem Lambda?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396016</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 23 Apr 2014 18:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Wed, 23 Apr 2014 20:02:02 GMT]]></title><description><![CDATA[<p>Erzähl mal was das für einen Sinn machen soll also der Use Case <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="😃"
    /> Muss ja was völlig verquertes sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396035</guid><dc:creator><![CDATA[......,]]></dc:creator><pubDate>Wed, 23 Apr 2014 20:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Thu, 24 Apr 2014 11:36:53 GMT]]></title><description><![CDATA[<p>Wenn random_money einen zufälligen Wert zurückgeben sollte ist das btw. nicht erlaubt es im Comparotor-Objekt zu verwenden da es dann keine Ordnungsrelation mehr ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396101</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 24 Apr 2014 11:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Thu, 24 Apr 2014 12:49:06 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Wenn random_money einen zufälligen Wert zurückgeben sollte ist das btw. nicht erlaubt es im Comparotor-Objekt zu verwenden da es dann keine Ordnungsrelation mehr ist.</p>
</blockquote>
<p>Ja das stimmt, war jetzt nicht das beste Beispiel mit dem random Wert. In echt wird hier kein random Wert verwendet, sondern ein deterministischer, mir ist nur für das Minimal-Beispiel nichts besseres eingefallen <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>......, schrieb:</p>
<blockquote>
<p>Erzähl mal was das für einen Sinn machen soll also der Use Case <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="😃"
    /> Muss ja was völlig verquertes sein</p>
</blockquote>
<p>Ist für ein physikalisches System, dessen interne Zustände sortiert werden müssen... <code>Money</code> ist in Wirklichkeit sowas wie <code>PhysicalState</code> und Moneybag ist <code>PhysicalSystem</code> . Die States werden aber durch Veränderung ihrer Reihenfolge auch durch das <code>PhysicalSystem</code> beeinflusst, daher will ich in der Sortiermethode auf Methoden von <code>PhysicalSystem</code> zugreifen können.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Wie wäre es einfach mit einem Lambda?</p>
</blockquote>
<p>Hm, aber wie soll ich das in den <code>operator()</code> reinkriegen? Die <code>std::sort</code> Funktion braucht ja einen <code>operator()</code> der genau zwei Typen der zu vergleichenden Objekte nimmt?</p>
<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Definiert</p>
<p>Sie benutzt die Methode <code>MoneyBag::random_money()</code> , und die war an der alten Stelle noch nicht bekannt(nur eine Forwärtsdeklaration von <code>class MoneyBag</code> , keine Details)</p>
</blockquote>
<p>Hm Ok. Das ist schon sehr nervig muss ich sagen, aber gut. Kann man nicht irgendwie nur die Methode <code>MoneyBag::random_money()</code> vorwärts-deklarieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396108</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 24 Apr 2014 12:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Thu, 24 Apr 2014 12:53:52 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Wie wäre es einfach mit einem Lambda?</p>
</blockquote>
<p>Hm, aber wie soll ich das in den <code>operator()</code> reinkriegen? Die <code>std::sort</code> Funktion braucht ja einen <code>operator()</code> der genau zwei Typen der zu vergleichenden Objekte nimmt?</p>
</blockquote>
<p>Einfach hinschreiben. Lambdas sind genau für sowas da.</p>
<pre><code>MoneyBag mb;
std::sort(much_money.begin(), much_money.end(), [&amp;](const Money &amp;lhs, const Money &amp;rhs){return mb.compare(lhs.value, rhs.value);} };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2396109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396109</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 24 Apr 2014 12:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to In std::sort Funktor auf andere Klassen zugreifen? on Thu, 24 Apr 2014 14:23:51 GMT]]></title><description><![CDATA[<p>Hm, das ist natürlich nicht schlecht... werd ich gleich mal ausprobieren, danke <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/2396130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396130</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 24 Apr 2014 14:23:51 GMT</pubDate></item></channel></rss>