<?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[Container set - Objekte manipulieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe das problem, dass set (STL) iteratoren per definition const_iteratoren sind, d.h. nicht änderbar. Kann man das umgehen?<br />
Siehe Bsp.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;set&gt;

using namespace std;

class SNum {
private :
	int num;
	int test;
public:
	SNum( int num ) { this-&gt;num = num ; test = 0;};
	~SNum(){};
	void set_num( int num ){ this-&gt;num = num; };
    int get_num() const  { return num;};
	void set_test( int test ){ this-&gt;test = test; };
    int get_test() const  { return test;};
    friend bool operator &lt; (const SNum&amp; a, const SNum&amp; b) {
          if(a.get_num() &lt; b.get_num() )
             return true;
          else
             return false;
       }
	void operator=(const SNum&amp; o){
	       this-&gt;num = o.num;
	   }
};

int main() {

	set&lt;SNum&gt; sN;
	set&lt;SNum&gt;::iterator sN_it;

	sN.insert(SNum(2));
	sN.insert(SNum(1));

	const SNum* s1 = 0;
	SNum* s2 = 0;

	for ( sN_it = sN.begin(); sN_it != sN.end(); ++ sN_it ) {
 		sN_it-&gt;set_test(42);  // das geht nicht, compiler (wegen iterator == const_iterator?)
		s1 = &amp;*sN_it;
 		s1-&gt;set_test(42);     // das geht nicht, compiler (wegen const)
		s2 = &amp;*sN_it;         // das geht nicht, compiler  da deklaration ohne const
		s2-&gt;set_test(42));
		cout &lt;&lt; sN_it-&gt;get_num() &lt;&lt; &quot; &quot; &lt;&lt; sN_it-&gt;get_test() &lt;&lt; endl;
	}
	return 0;
}
</code></pre>
<p>schon ml vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302653/container-set-objekte-manipulieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:50:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302653.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Apr 2012 18:50:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Container set - Objekte manipulieren on Mon, 23 Apr 2012 18:50:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe das problem, dass set (STL) iteratoren per definition const_iteratoren sind, d.h. nicht änderbar. Kann man das umgehen?<br />
Siehe Bsp.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;set&gt;

using namespace std;

class SNum {
private :
	int num;
	int test;
public:
	SNum( int num ) { this-&gt;num = num ; test = 0;};
	~SNum(){};
	void set_num( int num ){ this-&gt;num = num; };
    int get_num() const  { return num;};
	void set_test( int test ){ this-&gt;test = test; };
    int get_test() const  { return test;};
    friend bool operator &lt; (const SNum&amp; a, const SNum&amp; b) {
          if(a.get_num() &lt; b.get_num() )
             return true;
          else
             return false;
       }
	void operator=(const SNum&amp; o){
	       this-&gt;num = o.num;
	   }
};

int main() {

	set&lt;SNum&gt; sN;
	set&lt;SNum&gt;::iterator sN_it;

	sN.insert(SNum(2));
	sN.insert(SNum(1));

	const SNum* s1 = 0;
	SNum* s2 = 0;

	for ( sN_it = sN.begin(); sN_it != sN.end(); ++ sN_it ) {
 		sN_it-&gt;set_test(42);  // das geht nicht, compiler (wegen iterator == const_iterator?)
		s1 = &amp;*sN_it;
 		s1-&gt;set_test(42);     // das geht nicht, compiler (wegen const)
		s2 = &amp;*sN_it;         // das geht nicht, compiler  da deklaration ohne const
		s2-&gt;set_test(42));
		cout &lt;&lt; sN_it-&gt;get_num() &lt;&lt; &quot; &quot; &lt;&lt; sN_it-&gt;get_test() &lt;&lt; endl;
	}
	return 0;
}
</code></pre>
<p>schon ml vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205037</guid><dc:creator><![CDATA[*lt*---*gt*]]></dc:creator><pubDate>Mon, 23 Apr 2012 18:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Container set - Objekte manipulieren on Mon, 23 Apr 2012 19:00:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct A
{
	mutable int i;
	void a(int value) const
	{
		i = value;
	}
};
</code></pre>
<p>Aufpassen die Sortierung nicht zu killen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205038</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 23 Apr 2012 19:00:27 GMT</pubDate></item><item><title><![CDATA[Reply to Container set - Objekte manipulieren on Mon, 23 Apr 2012 19:35:03 GMT]]></title><description><![CDATA[<p>Hmm, ich könnte schwören, dass das bisher laut Standard erlaubt war und erst in C++11 iterator==const_iterator gesetzt wurde. Das Verhalten war dann undefiniert, wenn man die Ordnung durcheinander brachte. Aber jetzt finde ich die entsprechende Stelle im Standard nicht. Verwechsele ich da etwas mit einem anderen Container?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205052</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 23 Apr 2012 19:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to Container set - Objekte manipulieren on Mon, 23 Apr 2012 20:18:18 GMT]]></title><description><![CDATA[<p>&lt;---&gt; schrieb:</p>
<blockquote>
<p>ich habe das problem, dass set (STL) iteratoren per definition const_iteratoren sind, d.h. nicht änderbar. Kann man das umgehen?</p>
</blockquote>
<p>Eine Änderung innerhalb eines sets müsste eine komplette Umstrukturierung erzwingen (Set dient ja unter anderem der Schnellen Suche und ist als Suchbaum aufgebaut). Eine Variante könnte wohl sein das du statt einer direkten Objektänderung dir das Objekt ausliest, dieses aus dem set löschst und dann wieder einfügst. Wenn du das allerdings häufig tust, ist die Frage ob ein set überhaupt für deine Anforderungen der richtige Container ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205075</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Apr 2012 20:18:18 GMT</pubDate></item></channel></rss>