C++で3次元ベクトルをstd::setにinsertする

こんにちは。ヤマヤタケシです。
くっそー。意外にハマった!ハマったから、ここにメモる!

やりたいこと。double x,y,zの3次元ベクトルを重複なしにしたい!
で、std::vectorだと線形に探してしまうので、クソ遅い。
なので、std::setを使ってやろう!

それがなかなか難しかった。
std::setは、要素を内部で序列付きで追加してくれる。
序列があるから、対数時間で重複なしで挿入できる。

自分が作ったクラスなので、”序列”を自分で定義しなくちゃいけない。

具体的には、operator < をオーバーライドする必要がある。 operator< の条件がなかなかうまく行かなかったのだ! うまくいったあとコードを眺めれば、「そうだよね。」くらいなのだけども。 考えの浅い間違った条件のコード。

正しいコード。テスト付き。

そんじゃまた。 軽い気持ちで有名になりたいのでクリックをお願いします!

コメントを残す

メールアドレスが公開されることはありません。