#include <iostream>
#include <algorithm>
#include <vector>
#include <chrono>
using namespace std;
template<typename T>
void removeDuplicates(std::vector<T>& vec)
{
auto start = std::chrono::high_resolution_clock::now();
std::sort(vec.begin(), vec.end());
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
std::cout << elapsed.count() << std::endl;
}
template<typename T>
struct Container
{
typedef T Type;
};
template<typename T>
T removeRepeats(T const& v)
{
auto start = std::chrono::high_resolution_clock::now();
T results;
for(auto it = std::begin(v) ; it != std::end(v) ; ++it) {
auto foundElement = std::find(std::begin(results), std::end(results), *it);
if(foundElement == std::end(results))
results.push_back(*it);
else
std::cout << "Duplicate found: " << *it << std::endl;
}
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
std::cout << elapsed.count() << std::endl;
return results;
}
int main() {
Container<std::vector<int>>::Type input { 1, -10, 2, 1, 3, -10, -80 };
auto results = removeRepeats(input);
std::vector<int> in { 1, -10, 2, 1, 3, -10, -80 };
removeDuplicates(in);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2hyb25vPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCByZW1vdmVEdXBsaWNhdGVzKHN0ZDo6dmVjdG9yPFQ+JiB2ZWMpCnsKCWF1dG8gc3RhcnQgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIHN0ZDo6c29ydCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpKTsKICAgIHZlYy5lcmFzZShzdGQ6OnVuaXF1ZSh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpKSwgdmVjLmVuZCgpKTsKICAgIGF1dG8gZW5kID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CglhdXRvIGVsYXBzZWQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bmFub3NlY29uZHM+KGVuZCAtIHN0YXJ0KTsKCXN0ZDo6Y291dCA8PCBlbGFwc2VkLmNvdW50KCkgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgQ29udGFpbmVyCnsKCXR5cGVkZWYgVCBUeXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KVCByZW1vdmVSZXBlYXRzKFQgY29uc3QmIHYpCnsKCWF1dG8gc3RhcnQgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKCVQgcmVzdWx0czsKCWZvcihhdXRvIGl0ID0gc3RkOjpiZWdpbih2KSA7IGl0ICE9IHN0ZDo6ZW5kKHYpIDsgKytpdCkgewoJCWF1dG8gZm91bmRFbGVtZW50ID0gc3RkOjpmaW5kKHN0ZDo6YmVnaW4ocmVzdWx0cyksIHN0ZDo6ZW5kKHJlc3VsdHMpLCAqaXQpOwoJCWlmKGZvdW5kRWxlbWVudCA9PSBzdGQ6OmVuZChyZXN1bHRzKSkKCQkJcmVzdWx0cy5wdXNoX2JhY2soKml0KTsKCQllbHNlCgkJCXN0ZDo6Y291dCA8PCAiRHVwbGljYXRlIGZvdW5kOiAiIDw8ICppdCA8PCBzdGQ6OmVuZGw7Cgl9CglhdXRvIGVuZCA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoJYXV0byBlbGFwc2VkID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzPihlbmQgLSBzdGFydCk7CglzdGQ6OmNvdXQgPDwgZWxhcHNlZC5jb3VudCgpIDw8IHN0ZDo6ZW5kbDsgCglyZXR1cm4gcmVzdWx0czsKfQoKaW50IG1haW4oKSB7CgkKCUNvbnRhaW5lcjxzdGQ6OnZlY3RvcjxpbnQ+Pjo6VHlwZSBpbnB1dCB7IDEsIC0xMCwgMiwgMSwgMywgLTEwLCAtODAgfTsKCWF1dG8gcmVzdWx0cyA9IHJlbW92ZVJlcGVhdHMoaW5wdXQpOwoJCglzdGQ6OnZlY3RvcjxpbnQ+IGluIHsgMSwgLTEwLCAyLCAxLCAzLCAtMTAsIC04MCB9OwoJcmVtb3ZlRHVwbGljYXRlcyhpbik7CglyZXR1cm4gMDsKfQ==