こんにちは、ありがとうございました!関数のオーバーロードを呼び出すstruct operator /()は何を引数にしますか?
std::vector
からstd::unique
〜erase
を使用しています。一意性をチェックするために、私は構造体のブール関数を呼び出しています。あらかじめ定義された公差を使用したいので、目的の値が渡されるコンストラクタを追加しようとしました。それはうまくいきますが、私はなぜその理由が分かりません。
std::vector<std::pair<int,double> > myVec;
struct Check{
double tol_ = 0.0;
Check(double tol) : tol_(tol)
{
}
bool operator()(const std::pair<int,double> &a,
const std::pair<int,double> &b)
{
return fabs(a.second-b.second) < tol_;
}
};
// fill vector
...
// remove duplicates
myVec.erase(std::unique(myVec.begin(), myVec.end(), Check(0.1)), myVec.end());
これはやや妥当な方法ですか?私はunique
について混乱しています。この機能に達すると、構造体Check
が公差を使用して構築されます。 次へunique
は、この構造体をもう一度呼び出してベクトル要素を参照として渡して比較します。
ありがとうございました!
は、なぜあなたは 'myVec->()'の代わりに 'myVec.beginを()'始めていますか? – PRP
まず、['std :: unique'](http://en.cppreference.com/w/cpp/algorithm/unique)は重複する*連続する要素を削除します。つまり、範囲をソートする必要があります。第二に、 'myVec'はポインタではないようですが、矢印メンバーアクセス演算子を使うのは間違っています。最後に、*どのように動作しませんか?あなたは詳細を教えていただけますか? –
本当にご質問ありますか?私は「はい」と答えることしかできないということです。これは合理的な練習であり、そのように行われます。だからあなたはこれがどのように機能するか正しいです。 – Hayt