<?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[Objekte nach einer bestimmten Zeit aus Container entfernen]]></title><description><![CDATA[<p>Ich möchte ein Modul entwickeln das abstrakt gesehen folgendes machen soll. Von außen sollen Gegenstellen bei dem Modul Nachrichten absetzen können. Diese werden intern an ein anderes Modul weitergeleitet wobei ihnen ein Status und eine ID zugewiesen werden. Der Status kann sich ändern wobei mein Modul darüber informiert wird. Mein Modul soll dabei den Gegenstellen die Möglichkeit geben, mithilfe der ID den Status ihre abgesetzten Nachricht anzufragen. Prinzipiell nicht so kompliziert.</p>
<p>Ich dacht zuerst, ich speichere einfach den Status in einer Map mit der ID als Key, so dass ich mit der ID den Status abfragen und ändern kann. So weit so gut. Nun ist nun aber ein Mechanismus erforderlich, der Elemente aus der Map entfernt, die länger nicht mehr angefragt werden. Erste Idee war, ein Zeitstempel zum Status zu legen und regelmäßig alte Elemente aus der Map zu entfernen, aber da fängt es schon an. Da es so etwas wie remove_if für die map nicht gibt, müsste ich da zu Fuß drüber iterieren oder? Nicht sehr schön, nicht sehr schnell und wahrscheinlich auch fehleranfällig. Eine andere Idee wäre, einen Timer zu dem Status zu legen, der das Element nach einer gewissen Zeit selber entfernt, aber da scheint es mit Abhängigkeitsprobleme zu geben. Ist Map überhaupt der richtige Container für meine Anwendung? Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320401/objekte-nach-einer-bestimmten-zeit-aus-container-entfernen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:40:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320401.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Sep 2013 20:19:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 20:19:42 GMT]]></title><description><![CDATA[<p>Ich möchte ein Modul entwickeln das abstrakt gesehen folgendes machen soll. Von außen sollen Gegenstellen bei dem Modul Nachrichten absetzen können. Diese werden intern an ein anderes Modul weitergeleitet wobei ihnen ein Status und eine ID zugewiesen werden. Der Status kann sich ändern wobei mein Modul darüber informiert wird. Mein Modul soll dabei den Gegenstellen die Möglichkeit geben, mithilfe der ID den Status ihre abgesetzten Nachricht anzufragen. Prinzipiell nicht so kompliziert.</p>
<p>Ich dacht zuerst, ich speichere einfach den Status in einer Map mit der ID als Key, so dass ich mit der ID den Status abfragen und ändern kann. So weit so gut. Nun ist nun aber ein Mechanismus erforderlich, der Elemente aus der Map entfernt, die länger nicht mehr angefragt werden. Erste Idee war, ein Zeitstempel zum Status zu legen und regelmäßig alte Elemente aus der Map zu entfernen, aber da fängt es schon an. Da es so etwas wie remove_if für die map nicht gibt, müsste ich da zu Fuß drüber iterieren oder? Nicht sehr schön, nicht sehr schnell und wahrscheinlich auch fehleranfällig. Eine andere Idee wäre, einen Timer zu dem Status zu legen, der das Element nach einer gewissen Zeit selber entfernt, aber da scheint es mit Abhängigkeitsprobleme zu geben. Ist Map überhaupt der richtige Container für meine Anwendung? Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355872</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 26 Sep 2013 20:19:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 20:30:23 GMT]]></title><description><![CDATA[<p>Kommt drauf an, wie schnell gelöscht werden muss und wie oft gelesen wird.</p>
<p>Zwischen priority_queue (echtzeit mit O(log n) update) und einer for-Loop mit map-erase (gibt keinen fertigen algorithmus dafür) liegt alles drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355873</guid><dc:creator><![CDATA[mappus]]></dc:creator><pubDate>Thu, 26 Sep 2013 20:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 20:46:43 GMT]]></title><description><![CDATA[<p>mappus schrieb:</p>
<blockquote>
<p>Kommt drauf an, wie schnell gelöscht werden muss und wie oft gelesen wird.</p>
<p>Zwischen priority_queue (echtzeit mit O(log n) update) und einer for-Loop mit map-erase (gibt keinen fertigen algorithmus dafür) liegt alles drin.</p>
</blockquote>
<p>Das ist schwer zu sagen. Ich denke, das eigentlich weder das löschen noch das lesen wirklich performance kritisch sind. Nehmen wir mal an Performance spiel keine Rolle. Ich würde am liebsten Code schreiben der möglichst kompakt, verständlich und wenig fehleranfällig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355876</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 26 Sep 2013 20:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 20:58:55 GMT]]></title><description><![CDATA[<p>priority_queue geht doch gar nicht oder, da ich immer nur auf ein Element zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355879</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 26 Sep 2013 20:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 21:42:40 GMT]]></title><description><![CDATA[<p>Du nimmst eine zweite Datenstruktur in der du dein Workingset verwaltest. Diese enthaelt Zeit und Verweis/Iterator auf das Element in der Map.</p>
<p>Da es sich um die Realisierung eines Caches handelt, solltest du dir <a href="http://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner" rel="nofollow">http://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner</a> ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355880</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Sep 2013 21:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 21:46:38 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Du nimmst eine zeite Datenstruktur in der du dein Workingset verwaltest. Diese enthaelt Zeit und Verweis/Iterator auf das Element in der Map.</p>
</blockquote>
<p>Das funktioniert leider nicht. Ich muss die Zeit ja updaten wenn ein Request reinkommt, und ich bekomme nur die ID.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Da es sich um die Realisierung eines Caches handelt, solltest du dir <a href="http://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner" rel="nofollow">http://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner</a> ansehen.</p>
</blockquote>
<p>Das ist nicht wirklich ein Cache. Es geht nicht um die Pufferung von Anfragen und Objekte die einmal raus aus der Map sind kommen nie wieder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355881</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 26 Sep 2013 21:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 21:54:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Das funktioniert leider nicht. Ich muss die Zeit ja updaten wenn ein Request reinkommt, und ich bekomme nur die ID.</p>
</blockquote>
<p>Dann erklaere doch mal genauer, warum das nicht geht, da ich ja ueber die ID auf das Objekt zugreife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355882</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Sep 2013 21:54:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 22:14:10 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Das funktioniert leider nicht. Ich muss die Zeit ja updaten wenn ein Request reinkommt, und ich bekomme nur die ID.</p>
</blockquote>
<p>Dann erklaere doch mal genauer, warum das nicht geht, da ich ja ueber die ID auf das Objekt zugreife.</p>
</blockquote>
<p>Ich komme bei der map mit der ID auf die Objekte. Aber laut deinem Vorschlag liegt doch jetzt der Zeitstempel den ich ändern muss zusammen mit dem Iterator in einer anderen Struktur. Wie komme ich dort jetzt an den Eintrag ran der den Iterator zum richtigen Objekt hat, außer durch lineare Suche?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355884</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 26 Sep 2013 22:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Thu, 26 Sep 2013 23:05:42 GMT]]></title><description><![CDATA[<p>Auf der einen Seite ist die ID Ordnungskriterium und erlaubt schnellen Zugriff in O(log n). Auf der anderen Seite hast du ein zweites Ordnungskriterium, die Zeit. Wenn du nach beiden fuer schnellen Zugriff ordnen willst, dann brauchst du zwei Container. Natuerlich sollte das Element im ID-Container einen Verweis auf auf das korrespondierende Element im Zeit-Container besitzen, um die Zeit zu aktualisieren. Andersherum sollte das Element im Zeit-Container einen Verweis auf das korrespondierende Element im ID-Container besitzen, um es entfernen zu koennen.</p>
<p>Als Containertypen schlage ich map und list vor. Wird auf das Objekt zugegriffen, so wird die Zeit aktualisiert und das Element im Zeit-Container wandert an die Spitze. Entfernt wird immer vom Ende des Zeit-Containers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355887</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Sep 2013 23:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nach einer bestimmten Zeit aus Container entfernen on Fri, 27 Sep 2013 00:11:45 GMT]]></title><description><![CDATA[<p>Für Caches kann man schön Boost.Multiindex oder Boost.Intrusive verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355895</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 27 Sep 2013 00:11:45 GMT</pubDate></item></channel></rss>