Шаблонная функция C ++ проверяет уникальный вектор - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь написать шаблонную функцию с именем unique(), которая определяет, содержит ли std::vector только уникальные элементы, используя только заголовки <vector>, <set> и <iostream>.

template <typename T>
bool unique(const std::vector<T>& container){}

Как мне это сделать?

Ответы [ 2 ]

5 голосов
/ 30 января 2020

На самом деле это довольно просто, если вы можете использовать std::set. Поскольку std::set будет хранить только уникальные предметы, вы можете создать std::set из std::vector и сравнить их размеры. Если они совпадают, то вектор имеет уникальные элементы. Это будет выглядеть как

template <typename T>
bool unique(const std::vector<T>& container)
{
    return container.size() == std::set<T>{container.begin(), container.end()}.size();
}
2 голосов
/ 30 января 2020
std::set<T> other{ container.begin(), container.end() );
return other.size() < container.size();

Вы также можете прорваться рано.

std::set<T> other;
for (auto&& e:container)
  if (!other.insert( e ).second)
    return false;
return true;
...