Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
_>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
А тебе название контейнера ничего не говорит?
Написано же: НЕУПОРЯДОЧЕННОЕ множество.
В стандартной библиотеке порядок вставки сохраняет только последовательный контейнер.
Но это смотря какие операции тебе надо производить, кроме отслеживания порядка.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, _agg, Вы писали:
_>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
Не понятно что тебе надо в итоге ?! В STL нет контейнера который бы позволял доступ по индексу (с сохранением порядка) и одновременно давал бы быстрый поиск, если ты об этом?
Тебе нужен какой-нибудь multiindex контейнер или напиши свой. Опять же, всё зависит от задачи.
Здравствуйте, _agg, Вы писали:
_>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
Вариант 1: поменять язык
JavaScript уже много лет как делает такое по умолчанию.
Python — начиная с 3.5.
В Java есть LinkedHashMap.
Вариант 2: Сделать таки обёртку вокруг std::unordered_set. Для C++ на вопрос об аналоге отвечают, например, тут, или пытаются написать тут. (set считаем частным случаем map, или наоборот.)
Ещё имеет смысл подумать просто про std::set, если важен фиксированный порядок, а не тот, в котором поступали ключи.
_>После его запуска получаем вот такой результат:
_>OPERCODE _>ACCOUNT _>MTSID _>OPERNAME _>orderSum _>TRNID _>CHECKID _>ACCEPT_CODE
_>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
Сохранить в том порядке, в котором пришли — std::list, std::vector, std::array.
Реализация std::unordered_set — хэш-таблица; При обходе элементы будут не в том порядке, в каком пришли и не упорядочены.
std::list — связанный список;
std::vector — динамический массив;
std::array — массив фиксированной длины;
std::set, std::map — красно-чёрное дерево.
Выбирай, что тебе нужно, в зависимости от свойств этих структур данных.
_>После его запуска получаем вот такой результат:
_>OPERCODE _>ACCOUNT _>MTSID _>OPERNAME _>orderSum _>TRNID _>CHECKID _>ACCEPT_CODE
_>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
Решил проблему оригинальной последовательности просто, положил рядом и заполнил экземпляр std::list<std::unordered_set<std::string>::iterator>
Здравствуйте, _agg, Вы писали:
_>>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
_>Решил проблему оригинальной последовательности просто, положил рядом и заполнил экземпляр std::list<std::unordered_set<std::string>::iterator>
Вы в курсе, в каких случаях итераторы инвалидируются? У вас такие случаи точно невозможны?
Здравствуйте, netch80, Вы писали:
_>>Решил проблему оригинальной последовательности просто, положил рядом и заполнил экземпляр std::list<std::unordered_set<std::string>::iterator>
N>Вы в курсе, в каких случаях итераторы инвалидируются? У вас такие случаи точно невозможны?
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, _agg, Вы писали:
_>>>Если внимательно посмотреть в какой последовательности вставляли, то при обходе контейнера видно что порядок нарушен, можно ли как то сохранить порядок вставки при обходе ?
_>>Решил проблему оригинальной последовательности просто, положил рядом и заполнил экземпляр std::list<std::unordered_set<std::string>::iterator>
N>Вы в курсе, в каких случаях итераторы инвалидируются? У вас такие случаи точно невозможны?
В данном случае контейнер после добавления в него элементов не изменяется, поэтому итераторы валидны на протяжении всей жизни контейнера.