2011-01-10 5 views
2

2つのstd :: list < double>を比較する必要がありますが、倍数によっては無効な数値(QNAN)があることがあります。 無効な数値がリスト項目の場合、同じ無効な値を比較すると常に「false」になるため、比較処理は機能しません。 問題を解決する最も簡単で最もエレガントな方法は何ですか?C++:いくつかの無効な値(QNAN)とリストの比較

私の考えは、両方のリストのコピーを作成し、それを反復して無効な値を削除し、残りのリストを比較することでした。リストには、通常20〜50の値が入ります。それを解決するためのよりリソースフレンドリーな方法はありますか?

+0

あなたがあなた自身の比較ファンクタを記述する場合、あなたはそれを返すことができます '(NaNを== NaNの)== true'を(明示的にSTD'まで渡す前に、そのような場合のためにテストすることにより:: [cmpop] ') 。 –

+0

現在何をしていますか? – Simone

答えて

4
bool compare(float f1, float f2) 
{ 
    return (f1 != f1 && f2 != f2)? true: f1 == f2; 
} 

std::list<float> l1, l2; 
bool res = std::equal(l1.begin(), l1.end(), l2.begin(), compare); 
+0

+1 OPは実際にNAN値を扱うための 'compare'メソッドをコード化することができます。 – Simone

+3

+1、私は 'x!= x'の上に明示的な' isnan'を使用しています - 可読性と非IEEEEプラットフォームへのポータビリティ分離の両方のために(ただ一つの宇宙に存在するはずです) – peterchen

+0

そのトリックを行います。ロビンフードありがとう。 –

関連する問題