У меня есть map<std::string, myStruct>
Интересно, как сортировать элементы на карте по свойству int, которое находится в myStruct.order
, и если 2 или более из myStruct
заказов - это тот же самый список бросков ключей (строк), которые делают карту несортируемой этим полем myStruct? Есть ли какой-нибудь причудливый способ сделать в C++ 03 (может быть с boost)?Как сортировать массивную карту по одной ценности?
ответ
Вы не можете сделать это, используя std::map
- first
в pair
используются для сравнения (это называется ключ). В вашем случае std::string
является ключом .
Вы можете использовать std::set< std::pair< std::string, MyStruct > >
, а затем осуществить operator<
для двух std::pair< std::string, MyStruct >
-s.
Или вы можете изменить определение std::map
, если это возможно/разрешено/подходит/и т.д. Это действительно зависит от того, что вы пытаетесь сделать и что вам разрешено делать.
Или какой-либо другой контейнер (который держит порядок элементов, как размещено - как std::list
, std::vector
и т.д.), а затем с помощью std::sort
или sort
метод контейнера, если он существует.
Что означает «сортировка» карты? Конечно, карта может быть внутренне организована как BST или что-то сделать доступ быстрее, но концептуально элементы карты не имеют особого порядка.
Кроме этого, вы можете указать способ заказа ключей (потому что даже если вы организуете карту определенным образом, это по порядку ключей, а не по значению), но не для значений с третьим аргументом шаблона для карты.
Это неверно, std :: map * по определению * сортированная структура данных, даже концептуально. Примером концептуально несортированной карты является std :: unordered_map. – wjl
Я согласен с другими ответами, что непонятно, зачем вам нужно сортировать карту. Но вы можете использовать двунаправленную карту , чтобы вы могли просматривать как myStruct, так и строку как ключи.
Там один в толчок:
http://www.boost.org/doc/libs/1_48_0/libs/bimap/doc/html/index.html
Там пример здесь
http://www.boost.org/doc/libs/1_48_0/libs/bimap/doc/html/boost_bimap/examples/simple_bimap.html
импульс имеет полную (и сложные) функциональные возможности в MultiIndex, но если я правильно понимаю ваши требования, в этом случае это перебор. Достаточно простым способом было бы составить список указателей на myStruct и отсортировать. Тогда вы можете легко проверить дубликаты ключей (они стали смежными).
рода следует использовать функтор типа less<const myStruct*>
, т.е.
bool compare_orders(const myStruct* a, const myStruct* b) { return a->order < b->order; }
- 1. Сортировать карту по стоимости?
- 2. Clojure сортировать карту по значению
- 3. Как сортировать карту
- 4. сортировать карту по латам и длинным
- 5. сортировать карту в ACL2
- 6. Преобразование типа ценности в карту в Голанге?
- 7. Как сделать массивную вставку
- 8. Как получить массивную сумму
- 9. Как я могу сортировать карту STL по значению?
- 10. MySQL сортировать по две колонки одной таблицы
- 11. Как вручную сортировать карту в C++?
- 12. Сортировать по одной таблицы в MySQL
- 13. MATLAB матрица сортировать по одной строке
- 14. Сортировать карту на основе размера
- 15. Как пройти карту по значению
- 16. Java 8 - Сортировать карту по значению и собирать результаты
- 17. Как сделать AWK массивную арифметику?
- 18. Как сортировать по одной переменной в классе добавляется к ArrayList
- 19. Как сортировать весь dataframe по содержанию одной строки в
- 20. Как несколько сортировать карту [string] interface {} type in go lang?
- 21. Поиск по ключевой ценности Объект
- 22. Как сортировать по группам?
- 23. Как сортировать по близости?
- 24. Как сортировать QuerySet по
- 25. Как сортировать по столбцам
- 26. Как сортировать по дате
- 27. Как сортировать по другим
- 28. сортировать карту, исходя из ее стоимости
- 29. Попытка сортировать карту, где значение является объектом, и я могу сортировать по нескольким значениям в объекте
- 30. Как отсортировать карту хеша с использованием по убыванию по убыванию
http://www.cplusplus.com/reference/algorithm/sort/ это не помогает? – Vyktor
Поверните карту и сделайте ее «map», и вы получите это поведение бесплатно (при условии, что вы оснастите свой класс оператором сравнения). –