質問するログイン新規登録

回答編集履歴

1

add link

2017/11/07 15:05

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,4 +1,4 @@
1
- (あまりにコードが煩雑なため検証まで行っていませんが)`struct v`の`operator<`定義が正しくない、つまり`std::multimap<Key,T>`のキー型`Key`が満たすべき"Strict Weak Ordering"要件を満足しないように見えます。
1
+ (あまりにコードが煩雑なため検証まで行っていませんが)`struct v`の`operator<`定義が正しくない、つまり`std::multimap<Key,T>`の[キー型`Key`が満たすべき"Strict Weak Ordering"要件](http://d.hatena.ne.jp/Cryolite/20040529#p3)を満足しないように見えます。
2
2
 
3
3
  C++標準ライブラリの連想コンテナでは「より小さい(`<`)」演算子の定義が最も重要です。ただし"Strict Weak Ordering"要件を正しく実装するのは非常に難しいため、`<tuple>`ヘッダで提供される[`std::tie`関数の利用](https://cpprefjp.github.io/reference/tuple/tie.html)を推奨します。また、その他の大小比較演算子(`>`,`<=`,`=>`)定義も独自コードで行うのではなく、前述の「より小さい(`<`)」演算子を用いて定義すべきです。同様に、`!=`演算子は`==`演算子を用いて定義すべきです。
4
4