2017-11-08 14 views
1

私は浮動小数点数を含むソートベクターが100万個あり、各配列のサイズは同じで合理的に小さく(10個未満)、このようなベクターからユニークなベクターを集める必要があります。ユニークなソートベクターの収集

vec1 = {1.0, 1.2, 1.4, 1.6, 1.8} 
    vec2 = {1.0, 1.1, 1.3, 1.5, 1.7} 
    vec2 = {1.0, 1.3, 1.4, 1.5, 1.6} 

... 

    SomeTree ={vec1, vec2, vec3 ...} 

配列はすべての要素が数値的に同じである場合(ある精度まで)、そのような目的に適した特別なツリーまたは他のデータ構造体がありますか?

答えて

2

はい、あります。 std::setと呼ばれている:

#include <vector> 
#include <set> 

int main() 
{ 
    std::set<std::vector<double>> s{ 
     { 1.0, 1.1, 1.3, 1.5, 1.7 }, 
     { 1.0, 1.2, 1.4, 1.6, 1.8 }, 
     { 1.0, 1.1, 1.3, 1.5, 1.7 }, 
     { 1.0, 1.3, 1.4, 1.5, 1.6 }, 
     { 1.0, 1.2, 1.4, 1.6, 1.8 }, 
     { 1.0, 1.1, 1.3, 1.5, 1.7 }, 
     { 1.0, 1.2, 1.4, 1.6, 1.8 }, 
     { 1.0, 1.3, 1.4, 1.5, 1.6 }, 
     { 1.0, 1.3, 1.4, 1.5, 1.6 }, 
    };  
} 

それはあなたがあなたの要件に合うlessの定義を持つために、深くテンプレートのCompareパラメータを分析したいと思う可能性が高いです。

+0

Grazie!推移的な問題を理解していますが、デフォルトのless演算子を使用すると、少なくとも答えの例で{1.0,1.1,1.3} = {1.0,1.1,1.3}のようにうまくいくことを願っています。 – lorniper

+0

@lorniper真。それはまったく同じ倍にも完璧に機能します。それらの倍精度がある計算によって得られるとすぐに、それらはまったく同じではない可能性が高いでしょう。 –

+0

@ lorniperそれが正しいならば、その答えを受け入れることを忘れないでください。 –