3
그러므로 내가 가지고있다 std::vector<type>.
벡터에서 중복 된 요소를 제거하는 방법은 무엇입니까?
operator<
을 가지지 만, operator==
을 가지고있다. 따라서 std::unique
을 사용하여 벡터를 정렬 할 수 없습니다.
중복 된 요소를 벡터에서 어떻게 제거 할 수 있습니까?
그러므로 내가 가지고있다 std::vector<type>.
벡터에서 중복 된 요소를 제거하는 방법은 무엇입니까?
operator<
을 가지지 만, operator==
을 가지고있다. 따라서 std::unique
을 사용하여 벡터를 정렬 할 수 없습니다.
중복 된 요소를 벡터에서 어떻게 제거 할 수 있습니까?
나는 최상의 옵션은 벡터의 정렬에 사용하기 위해 이진 술어를 작성하고 나중에 std::unique
을 사용하는 것이라고 생각한다. 술어는 전 이적이어야합니다!
이 당신이 quardatic 알고리즘을 다른 작업을 수행하지만, 사용할 수있는 옵션이 아닌 경우 : 당신을 주문하지 않고
std::vector<type> a
std::vector<type> result;
for (unsigned i = 0; i < a.size(); ++i) {
bool repeated = false;
for (int j = 0; j < i; ++j) {
if (a[j] == a[i]) {
repeated = true;
break;
}
}
if (!repeated) {
result.push_back(a[i]);
}
}
// result stores the unique elements.
효율적으로이 작업을 수행하는 작은 기회를했습니다가. 분류되지 않은 주문 (주문 기능이 없어야 함)은 O (N^2) - 토지로 곧장 가게합니다. – WhozCraig
@WhozCraig : 꼭 그렇지는 않습니다. 완벽한 해시를 올리면 O (N)에서 할 수 있습니다. –
@MatthieuM. 완벽한 해시를 제공 할 수 있다면 처음에는'std :: unordered_set'보다는 정렬되지 않은 벡터에서 무엇을하고 있습니까? 나는 우리가 함께해야만했던 * OP *가 * 제공 한 정보가 OP의 제공 한 정보를 제공했다는 이유로 내 주장을 근거로 삼았다. 그들은 합리적인 해시 (완벽한 또는하지 않은 경우), 다음이 문제의 X "왜 내가 틀린 컨테이너를 사용하고 있습니까?" 그리고 명백하게 나는 그것이 작동하지 않을 그런 해시를 주어서 말할 수 없다; 분명히 그럴 것이다. – WhozCraig