<?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[Objektorietierung: Methode mit unterschiedlichen STL map verwenden]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Verständisproblem beim Methodenaufruf.<br />
Folgende Methode möchte ich für 3 verschiedene Fälle verwenden.</p>
<pre><code class="language-cpp">bool navContainer::getAllWPInRange( double lat0, double lon0, double rangeNM ) 
{
	float dist2;
	if(	EWP.size() &lt; 2 ) { 
		return false;
	}
	// EWP ist schon mit Daten gefüllt
	std::multimap&lt;std::string,NavData&gt;::iterator it = EWP.begin();
	std::string LastKey = it-&gt;first;

	while( it != EWP.end() ) {
		std::string stringlat = it-&gt;second.lat;
		std::string stringlon = it-&gt;second.lon;

		double lat; 
		std::istringstream(it-&gt;second.lat)&gt;&gt;lat;
		double lon;
		std::istringstream(it-&gt;second.lon)&gt;&gt;lon;

		lat = lat / 3600000.0f;
		lon = lon/3600000.0f;
		dist2 = distance( lat0, lon0, lat, lon );
		if ( ( rangeNM == 0.0 ) || (  dist2 &lt;= rangeNM) ){//(dist2 &lt;= 1.1* rangeNM  * NM2M)) {
			// speichere in neuer map

// in EWPinRange werden alle Daten gespeichert die aus EWP benötigt werden
EWPinRange.insert(make_pair(it-&gt;first,NavData(it-&gt;second.name, it-&gt;second.typ,it-&gt;second.lat,it-&gt;second.lon,it-&gt;second.freq))); 

		}

		++it;
	}
	ewpTrue  = true;
		EWPLoaded = true;

	//		}

		  return true;
}
</code></pre>
<p>Bisjetzt wird die Methode 1x aufgerufen. Bei den weiteren Aufrufen soll von der Logik her das gleiche passieren. Nur die Daten kommen aus anderen maps(bisher EWP) und sollen in anderen stl Mappen gespeichert werden (bisher EWPinRange).</p>
<p>hier die definition der map</p>
<pre><code class="language-cpp">std::multimap&lt;std::string,NavData&gt; NNDM; 
	std::multimap&lt;std::string,NavData&gt; VOR; 
	std::multimap&lt;std::string,NavData&gt; EWPinRange; 
	std::multimap&lt;std::string,NavData&gt; tmpEWP;
</code></pre>
<p>Jetzt meine Frage, ist die s.u. Lösung OK, oder ist das völlig an der Objektorientierung vorbei? Kann mir jemand nen Lösungsvorschlag geben?</p>
<p>also meine Idee ist, einen neuen Parameter einzuführen, der festlegt welche map gefüllt werden soll.</p>
<pre><code class="language-cpp">bool navContainer::getAllWPInRange( double lat0, double lon0, double rangeNM, int typ) 
{
	float dist2;

        int m_typ = typ;
	if (typ == &quot;aaa&quot;) {
        MAP = AAA; 
        MAPinRange = AAAinRange; // Zuweisung ??
}
else if(typ == &quot;bbb&quot;) {
MAP = BBB;
MAPinRange = BBBinRange;
}
..
if(	MAP.size() &lt; 2 ) { 
		return false;
	}
	std::multimap&lt;std::string,NavData&gt;::iterator it = MAP.begin(); // ??
	std::string LastKey = it-&gt;first;

	while( it != MAP.end() ) {
		std::string stringlat = it-&gt;second.lat;
		std::string stringlon = it-&gt;second.lon;

		double lat; 
		std::istringstream(it-&gt;second.lat)&gt;&gt;lat;
		double lon;
		std::istringstream(it-&gt;second.lon)&gt;&gt;lon;

		lat = lat / 3600000.0f;
		lon = lon/3600000.0f;
		dist2 = distance( lat0, lon0, lat, lon );
		if ( ( rangeNM == 0.0 ) || (  dist2 &lt;= rangeNM) ){//(dist2 &lt;= 1.1* rangeNM  * NM2M)) {
			// speichere in neuer map

			MAPinRange.insert(make_pair(it-&gt;first,NavData(it-&gt;second.name, it-&gt;second.typ,it-&gt;second.lat,it-&gt;second.lon,it-&gt;second.freq))); 

		}

		++it;
	}
	ewpTrue  = true;
		EWPLoaded = true;

	//		}

		  return true;
}
</code></pre>
<p>vielen Dank schon mal...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183813/objektorietierung-methode-mit-unterschiedlichen-stl-map-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 11:22:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183813.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Jun 2007 21:40:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objektorietierung: Methode mit unterschiedlichen STL map verwenden on Fri, 08 Jun 2007 21:40:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Verständisproblem beim Methodenaufruf.<br />
Folgende Methode möchte ich für 3 verschiedene Fälle verwenden.</p>
<pre><code class="language-cpp">bool navContainer::getAllWPInRange( double lat0, double lon0, double rangeNM ) 
{
	float dist2;
	if(	EWP.size() &lt; 2 ) { 
		return false;
	}
	// EWP ist schon mit Daten gefüllt
	std::multimap&lt;std::string,NavData&gt;::iterator it = EWP.begin();
	std::string LastKey = it-&gt;first;

	while( it != EWP.end() ) {
		std::string stringlat = it-&gt;second.lat;
		std::string stringlon = it-&gt;second.lon;

		double lat; 
		std::istringstream(it-&gt;second.lat)&gt;&gt;lat;
		double lon;
		std::istringstream(it-&gt;second.lon)&gt;&gt;lon;

		lat = lat / 3600000.0f;
		lon = lon/3600000.0f;
		dist2 = distance( lat0, lon0, lat, lon );
		if ( ( rangeNM == 0.0 ) || (  dist2 &lt;= rangeNM) ){//(dist2 &lt;= 1.1* rangeNM  * NM2M)) {
			// speichere in neuer map

// in EWPinRange werden alle Daten gespeichert die aus EWP benötigt werden
EWPinRange.insert(make_pair(it-&gt;first,NavData(it-&gt;second.name, it-&gt;second.typ,it-&gt;second.lat,it-&gt;second.lon,it-&gt;second.freq))); 

		}

		++it;
	}
	ewpTrue  = true;
		EWPLoaded = true;

	//		}

		  return true;
}
</code></pre>
<p>Bisjetzt wird die Methode 1x aufgerufen. Bei den weiteren Aufrufen soll von der Logik her das gleiche passieren. Nur die Daten kommen aus anderen maps(bisher EWP) und sollen in anderen stl Mappen gespeichert werden (bisher EWPinRange).</p>
<p>hier die definition der map</p>
<pre><code class="language-cpp">std::multimap&lt;std::string,NavData&gt; NNDM; 
	std::multimap&lt;std::string,NavData&gt; VOR; 
	std::multimap&lt;std::string,NavData&gt; EWPinRange; 
	std::multimap&lt;std::string,NavData&gt; tmpEWP;
</code></pre>
<p>Jetzt meine Frage, ist die s.u. Lösung OK, oder ist das völlig an der Objektorientierung vorbei? Kann mir jemand nen Lösungsvorschlag geben?</p>
<p>also meine Idee ist, einen neuen Parameter einzuführen, der festlegt welche map gefüllt werden soll.</p>
<pre><code class="language-cpp">bool navContainer::getAllWPInRange( double lat0, double lon0, double rangeNM, int typ) 
{
	float dist2;

        int m_typ = typ;
	if (typ == &quot;aaa&quot;) {
        MAP = AAA; 
        MAPinRange = AAAinRange; // Zuweisung ??
}
else if(typ == &quot;bbb&quot;) {
MAP = BBB;
MAPinRange = BBBinRange;
}
..
if(	MAP.size() &lt; 2 ) { 
		return false;
	}
	std::multimap&lt;std::string,NavData&gt;::iterator it = MAP.begin(); // ??
	std::string LastKey = it-&gt;first;

	while( it != MAP.end() ) {
		std::string stringlat = it-&gt;second.lat;
		std::string stringlon = it-&gt;second.lon;

		double lat; 
		std::istringstream(it-&gt;second.lat)&gt;&gt;lat;
		double lon;
		std::istringstream(it-&gt;second.lon)&gt;&gt;lon;

		lat = lat / 3600000.0f;
		lon = lon/3600000.0f;
		dist2 = distance( lat0, lon0, lat, lon );
		if ( ( rangeNM == 0.0 ) || (  dist2 &lt;= rangeNM) ){//(dist2 &lt;= 1.1* rangeNM  * NM2M)) {
			// speichere in neuer map

			MAPinRange.insert(make_pair(it-&gt;first,NavData(it-&gt;second.name, it-&gt;second.typ,it-&gt;second.lat,it-&gt;second.lon,it-&gt;second.freq))); 

		}

		++it;
	}
	ewpTrue  = true;
		EWPLoaded = true;

	//		}

		  return true;
}
</code></pre>
<p>vielen Dank schon mal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301706</guid><dc:creator><![CDATA[*lt*---*gt*]]></dc:creator><pubDate>Fri, 08 Jun 2007 21:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorietierung: Methode mit unterschiedlichen STL map verwenden on Sat, 09 Jun 2007 07:14:56 GMT]]></title><description><![CDATA[<p>hast dus denn ausprobiert obs funktioniert? ich denke nämlich, es funktioniert nicht. Was fürn Typ haben MAP und MAPinRange? Sind das lokale variablen? Dann änderst du auch nur die lokalen variablen und nicht die die du eigentlich ändern willst.</p>
<p>Wie wärs, wenn du der funktion eine Referenz auf die eingabemap und eine referenz auf die ausgabemap gibst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301788</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sat, 09 Jun 2007 07:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorietierung: Methode mit unterschiedlichen STL map verwenden on Sat, 09 Jun 2007 09:09:31 GMT]]></title><description><![CDATA[<p>Hi, vielen Dank!</p>
<p>Also, es funktioniert so nicht.</p>
<p>Aber ich denke deine Idee ist eh besser.</p>
<p>&quot;Wie wärs, wenn du der funktion eine Referenz auf die eingabemap und eine referenz auf die ausgabemap gibst?&quot;</p>
<p>Du meinst so?</p>
<pre><code class="language-cpp">bool navContainer::getAllWPInRange( double lat0, double lon0, double rangeNM, &amp;std::multimap&lt;std::string,NavData&gt; eingabemap, &amp;std::multimap&lt;std::string,NavData&gt; ausgabemap)
{
float dist2;
    if(    eingabemap.size() &lt; 2 ) {
        return false;
    }
    // EWP ist schon mit Daten gefüllt
    std::multimap&lt;std::string,NavData&gt;::iterator it = eingabemap.begin();
    std::string LastKey = it-&gt;first;

    while( it != eingabemap.end() ) {
        std::string stringlat = it-&gt;second.lat;
        std::string stringlon = it-&gt;second.lon;

        double lat;
        std::istringstream(it-&gt;second.lat)&gt;&gt;lat;
        double lon;
        std::istringstream(it-&gt;second.lon)&gt;&gt;lon;

        lat = lat / 3600000.0f;
        lon = lon/3600000.0f;
        dist2 = distance( lat0, lon0, lat, lon );
        if ( ( rangeNM == 0.0 ) || (  dist2 &lt;= rangeNM) ){//(dist2 &lt;= 1.1* rangeNM  * NM2M)) {
            // speichere in neuer map

// in EWPinRange werden alle Daten gespeichert die aus EWP benötigt werden
ausgabemap.insert(make_pair(it-&gt;first,NavData(it-&gt;second.name, it-&gt;second.typ,it-&gt;second.lat,it-&gt;second.lon,it-&gt;second.freq)));

        }

        ++it;
    }

}
</code></pre>
<p>Was passiert wenn ich eine Referenz auf die Mappen übergebe?<br />
Es wird nicht der Wert, sondern die Adresse der Speicherzelle übergeben. Stimmt das?<br />
Die Mappen haben ca. 800 Einträge, und ich wollte nicht Daten hin und her schieben. Aber mit Referenz passiert das nicht?</p>
<p>Und dann noch, ist der Aufruf korrekt?</p>
<pre><code class="language-cpp">getAllWPInRange( 59, 9, 50, EWP, EWPinRange);
     getAllWPInRange( 60, 9.7, 50, AAA, AAAinRange);

...
</code></pre>
<p>vielen Dank für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301847</guid><dc:creator><![CDATA[*lt*---*gt*]]></dc:creator><pubDate>Sat, 09 Jun 2007 09:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorietierung: Methode mit unterschiedlichen STL map verwenden on Sat, 09 Jun 2007 10:09:05 GMT]]></title><description><![CDATA[<p>ja, wenn du eine referenz übergibst, wird nur die adresse wo die map liegt kopiert.</p>
<p>btw... eine map ist keie mappe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> aber das nur am rande.</p>
<p>Wenn du keine Referenz übergeben würdest, dann würde die ganze map kopiert werden, und, was noch viel wichtiger ist, es würde nur deine Kopie bearbeitet werden und nicht das original was du übergeben wolltest.</p>
<p>nochwas: deine syntax ist falsch, im parameter muss es heißen</p>
<p>std::multimap&lt;std::string, unddasandere&gt;&amp; parameter</p>
<p>Das &amp; muss also nach dem typ un nich vor dem typ stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301886</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sat, 09 Jun 2007 10:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorietierung: Methode mit unterschiedlichen STL map verwenden on Sat, 09 Jun 2007 10:48:40 GMT]]></title><description><![CDATA[<p>danke, werd's ausprobieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301908</guid><dc:creator><![CDATA[*lt*---*gt*]]></dc:creator><pubDate>Sat, 09 Jun 2007 10:48:40 GMT</pubDate></item></channel></rss>