Мне нужно поддерживать порядок ввода пользователем данных, но необходимо устранить дубликаты. Я посмотрел на карту, она устраняет дубликаты, но невозможно поддерживать порядок ввода пользователя. Такая же проблема с множеством. Есть ли какая-либо структура данных в stl, которая может отвечать обоим требованиям? Я не могу использовать boost над этим проектом.datastructure в C++ для поддержания порядка вставки и устранения дубликатов
ответ
Поддержание карты и списка. Для каждого элемента выполните поиск карты перед добавлением в список. Если не найдено, добавьте в список и вставьте в карту, продолжайте.
Можете ли вы указать мне пример, где я могу указать пользовательский компаратор для указания, когда экземпляры моего класса должны быть равны? – Jimm
Зависит от того, что вы подразумеваете под «равным». Если заказ неважен, сравните «карту» (или «установить»). Если порядок важен, сравните 'list' (или' vector'). – paddy
@ Jimm просто предоставляет свои собственные перегрузки оператора для ==, <, >. –
Проблема в том, что если вы поддерживаете порядок поиска, вам стоит искать дубликаты, поэтому вы не склонны находить структуры данных, которые делают оба. C++ 11 вводит std::unordered_set
, что, вероятно, вам нужно.
Если вы не используете C++ 11, вы можете просто инкапсулировать некоторые стандартные контейнеры в класс. Я бы предположил, что вы поместите свои предметы в set
или map
, а затем сохраните итератор для элемента в vector
.
#include <cstdlib>
#include <iostream>
#include <random>
#include <vector>
#include <unordered_set>
using namespace std;
int main(int argc, char *argv[])
{
std::vector<int> data;
std::unordered_set<int> uniqueCollection;
for(int i = 0; i < 50; ++i)
{
int newData = rand() % 27;
cout << "trying to insert: " << newData << endl;
if(uniqueCollection.find(newData) == uniqueCollection.end())
{
cout << " inserting item: " << newData << endl;
data.push_back(newData);
uniqueCollection.insert(newData);
}
else
{
cout << " element already exists: " << newData << endl;
}
}
return 0;
}
http://www.cplusplus.com/reference/unordered_set/unordered_set/
- 1. datastructure для поддержания временного окна значений?
- 2. reduceBykey Спарк поддержания порядка
- 3. положения в массиве для поддержания порядка возрастания
- 4. Альтернатива NSCountedSet в Objective-C для поддержания порядка
- 5. Джанго запрос устранения дубликатов
- 6. хранимая процедура для устранения дубликатов данных
- 7. Реляционная алгебра оператор для устранения дубликатов
- 8. C++ Установить номера вставки для дубликатов
- 9. Метод устранения неполадок для вставки узлов java
- 10. Решения для вставки дубликатов ключей
- 11. Выберите строки с подитоги поддержания надлежащего порядка
- 12. Java - устранения дубликатов в 3D массив объектов
- 13. Очереди поддержания порядка, которые могут быть приостановлены
- 14. Перестановка строка панд dataframe на основе списка и поддержания порядка
- 15. Запуск фонового процесса Unix поддержания порядка
- 16. сценария оболочки для переименования файлов в папке поддержания порядка
- 17. Как избежать вставки дубликатов вставки?
- 18. Проверка вставки сетки для дубликатов
- 19. IOS Основные данные поддержания порядка по атрибуту
- 20. datastructure для синтаксического анализа файла в C#
- 21. Логсташ doc_as_upsert кросс-индекс в Elasticsearch для устранения дубликатов
- 22. Datastructure для области и участков
- 23. Предотвращение вставки дубликатов
- 24. Проверка дубликатов вставки в MySQL
- 25. Необходимость обслуживания порядка вставки в сборниках Java
- 26. Yii вставки без дубликатов
- 27. Алгоритм усечения строки и устранения дубликатов (чувствительно к регистру)
- 28. Избегайте вставки дубликатов подмассивов
- 29. запрос oracle sql для возврата строк путем устранения дубликатов
- 30. Сортировка основных данных с предикатом для устранения дубликатов
, что вы имеете в виду то же самое с набором? set упорядочен. – texasbruce
@texasbruce: set совпадает с картой, где он не поддерживает порядок вставки. –
Сколько элементов? 10s? 1000s? 1000000s? 100000000s? 10000000000s? – Yakk