重複を破棄して、ファイルから配列に数値を読み取ろうとしています。たとえば、次の番号がファイルにあるとします。
41 254 14 145 244 220 254 34 135 14 34 25
34という数字はファイルに2回出現しますが、配列に1回だけ保存したいと思います。どうすればいいですか?
(修正されましたが、より適切な用語は64ビットのUnsigned intだと思います)(255を超える数値を使用していました)
重複を破棄して、ファイルから配列に数値を読み取ろうとしています。たとえば、次の番号がファイルにあるとします。
41 254 14 145 244 220 254 34 135 14 34 25
34という数字はファイルに2回出現しますが、配列に1回だけ保存したいと思います。どうすればいいですか?
(修正されましたが、より適切な用語は64ビットのUnsigned intだと思います)(255を超える数値を使用していました)
vector<int64_t> v;
copy(istream_iterator<int64_t>(cin), istream_iterator<int64_t>(), back_inserter(v));
set<int64_t> s;
vector<int64_t> ov; ov.reserve(v.size());
for( auto i = v.begin(); i != v.end(); ++i ) {
if ( s.insert(v[i]).second )
ov.push_back(v[i]);
}
// ov contains only unique numbers in the same order as the original input file.