Попробуйте:
select ID from items group by ID having count(ID)> 1
, который вернет все значения ID
, появляющиеся более одного раза.
Обычный прием должен подкачать с пустым вектором:
vector<vertex>(vertexvector.begin(), vertexvector.end()).swap(vertexvector);
При совании элементов от вектора он не освобождает память (потому что это делало бы недействительным итераторы в контейнерные элементы). Можно скопировать вектор в новый вектор и затем подкачать это с оригиналом. Это затем сделает его не ненужным пространством. Подкачка имеет постоянную временную сложность, потому что подкачка не должна делать недействительным итераторы к элементам подкачанных векторов: Таким образом, это должно просто обмениваться внутренними буферными указателями.
vector<vertex>(a).swap(a);
Это известно как идиома "Уменьшения к соответствию". Кстати, следующая версия C++ включает "shrink_to_fit ()" функция членства для станд.:: вектор.
Зарезервированная память не уменьшается, когда векторный размер уменьшается, потому что это обычно лучше для производительности. Уменьшение объема памяти, зарезервированного вектором, является столь же дорогим как увеличение размера вектора вне зарезервированного размера, в котором это требует:
В некоторых случаях средство выделения может изменить размер оперативного выделения, но оно ни в коем случае не гарантируется.
Если у Вас было очень большое изменение в размере, требуемом, и Вы знаете, что не захотите, чтобы тот вектор расширился снова (принципал местности предполагает, что Вы будете, но конечно существуют исключения), то можно использовать предложенную операцию подкачки litb для явного уменьшения вектора:
vector<vertex>(a).swap(a);