🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #1721

Re: Rare C++ fout (std::map)

#1721
From: dichtertje
Date: Wed, 15 Dec 2004 21:35
41 lines
2926 bytes
Aquila <braempje@netscape.net> wrote:
> Arnold Hendriks wrote:
> 
>> Als je je operator bijvoorbeeld als turning < state.turning definieert,
>> dan zou de compare wel moeten werken. Nu de compare niet strict is, deugt
>> de sortering niet en dat kan best verklaren waarom de find() functie niet
>> goed werkt.
> 
> Je hebt gelijk, ik had daar een < moeten gebruiken. Nu ben ik er nog niet
> want dat was een (domme) vereenvoudiging. Normaal bestaat possiblestate uit
> een positie pos, een direction dir en een boolean turning. Maar ik wil dat
> die laatste 2 genegeerd worden want dat mag in die map geen verschil maken.
> Dus heb ik:
> bool PossibleState::operator<(const PossibleState & state) const{
> return (getPos().x < state.getPos().x) || (getPos().y < state.getPos().y);
> }
> Is dat ook verkeerd met die strict weak ordering? Ik heb eens gekeken op
> <http://www.sgi.com/tech/stl/StrictWeakOrdering.html> en dan zou ik niet
> voldoen aan antisymmetrie: (4,4) < (4,4) is false maar het omgekeerde is
> niet true zoals ge?ist...
> 
> Bedankt voor uw hulp!

Die antisymmetrie geldt enkel voor over verschillende waarden, als ze
gelijk zijn geldt de irreflixitiviteitsregel.

Ik heb de oorspronkelijke code niet bekeken, maar bovenstaande operator<
kan heel onverwachte resultaten geven. Immers maps werken met
equivalentie en niet met gelijkheid en met jouw operato< is (2,4) en
(2,3) equivalent, en dus als je zoekt naar (2,4) kun je een iterator
naar (2,3) terugkrijgen.
Ik kan niet oordelen of dit in uw geval een praktisch probleem is of
niet.

Bert

-- 
The three laws of thermodynamics:
	(1) You can't get anything without working for it.
	(2) The most you can accomplish by working is to break even.
	(3) You can only break even at absolute zero.
Technical Details
Message-ID: <1103146531.65374@seven.kulnet.kuleuven.ac.be>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!213.200.89.82.MISMATCH!tiscali!newsfeed1.ip.tiscali.net!feed.news.tiscali.de!syros.belnet.be!ikaria.belnet.be!news.belnet.be!not-for-mail
References: <ZJKdne45LpA4YyLcRVnyvA@scarlet.biz> <cpp19f$ipt$1@netlx020.civ.utwente.nl> <AsednWZ6OKynk13cRVnyuw@scarlet.biz>

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,f50cab2f57916087
X-Google-Attributes: gidfcea4,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!213.200.89.82.MISMATCH!tiscali!newsfeed1.ip.tiscali.net!feed.news.tiscali.de!syros.belnet.be!ikaria.belnet.be!news.belnet.be!not-for-mail
From: dichtertje <dichtertje@kotnet.org>
Newsgroups: be.comp.programming
Subject: Re: Rare C++ fout (std::map)
Date: Wed, 15 Dec 2004 21:35:31 +0000 (UTC)
Organization: KULeuvenNet
Lines: 41
Message-ID: <1103146531.65374@seven.kulnet.kuleuven.ac.be>
References: <ZJKdne45LpA4YyLcRVnyvA@scarlet.biz> <cpp19f$ipt$1@netlx020.civ.utwente.nl> <AsednWZ6OKynk13cRVnyuw@scarlet.biz>
NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be
X-Trace: ikaria.belnet.be 1103146531 26561 134.58.127.12 (15 Dec 2004 21:35:31 GMT)
X-Complaints-To: abuse@belnet.be
NNTP-Posting-Date: Wed, 15 Dec 2004 21:35:31 +0000 (UTC)
User-Agent: tin/1.7.6-20040906 ("Baleshare") (UNIX) (Linux/2.6.7-1-386 (i586))
Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@localhost
X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)