タグ

C++とStrictWeakOrderに関するakakitのブックマーク (2)

  • Visual C++はSTLのStrict Weak Orderingルールを検査してくれます

    STLの比較関数には、等しい値が渡されたときには、falseを返さなければならない、というルールがあります。 これは、「Strict Weak Orderingルール」と呼ばれ、例えば、SGI のStandard Template Library Programmer's Guideにも、Strict Weak Orderingという専用のページが存在しています。また、Effective STLでは、第21項に「等しい値に対して比較関数が常にfalseを返すようにしよう」という、そのものズバリの項目があります。 にも関わらず、私は、この件をすっかり忘れており、自分のコードの比較関数で、等しい値に対して true を返していました...。 この間違いが発覚したのは、問題のコードをWindowsのVisual C++ 2005でコンパイルして実行した時。普段はgccを使っていますが、マルチプラ

  • 2004-05-29

    ここ2日ほど考えていたis_sortedですが,ようやく結論が出ました.ですがその結論の前に,多分多くの人にとっては全然面白くないであろうことを延々議論します. 結論は今日のblogの一番最後にありますので,結論だけ見たい人はid:Cryolite:20040529#p5へ飛んでください. まず最初に「値が等しいということ(Equality)」という概念について今一度確認してもらいます.C++(に限らず多くのprogramming言語)で普通"=="(及び"!=")で表される関係です. int a = 1; int b = 1; int c = 2; assert( a == b ); // `a' is equal to `b' assert( a != c ); // `a' is not equal to `c' 上の例では,aとbはequalである,と言えます. 何のことは無い「値

    2004-05-29
  • 1