これが私に許してもらえない場合は、私はそれを見つけることができませんでした。 私は(曖昧な)等価を実装できるカスタム型を持っていますが、推移型の演算子は<
ではありません。 比較にはコストがかかりますが、私は多くの要素がありません。 私はまったく同じ(大部分に重なる)ポリゴンをソートする必要があります。 <
を使用して発注することにより、推移的な実装の不足のために不可能であるので、私はSTDを使用しています::リストを次のように:カスタムタイプのstd :: listから重複を削除する最速の方法
typedef std::list<Polygon> PolyList;
PolyList purged(rawList);
for (PolyList::iterator iter= purged.begin(); iter!= purged.end(); ++iter) {
for(PolyList::iterator toRemove = find(boost::next(iter),purged.end(),*iter); toRemove != purged.end();){
PolyList::iterator next = purged.erase(toRemove);
toRemove = find(next,purged.end(),*iter);
}
}
複雑さは、私の意見と 中で避けられないのn * n/2個ですアルゴリズムはうまく動作しますが、読んだり書いたりするのはまだ非常に面倒です。私はほとんど知っていない標準アルゴリズムがあると思います。私が言ったように、並べ替えはデータの曖昧性のためにオプションではないので、ユニークなセットやソートはありません。 多くのご協力をいただきありがとうございます。
だけ... * O(N^2)重複の除去、各要素の終わりに向かって重複するものを見つけ、それらを削除* –
[STD ::リスト::ユニーク]コメントあなたは何をしているかと言うと理由を追加(http://en.cppreference.com/w/cpp/container/list/unique)。 –
@Jesseそれは答えです! –