Действительно ли нет гарантированного заказа в unordered_map? Я прошу об этом, потому что я хотел бы указать порядок для unorderded_map
, чтобы можно было итератировать контейнер от begin()
до end()
в соответствии с указанным заказом (сохраняя при этом эффективность хеширования доступа к отдельным элементам во всем мире).Можно ли указать заказ на неупорядоченный_мап?
ответ
Вы знаете, он имеет свое название по причине ...
Чтобы действительно дать ему заказ, вам нужно реализовать свой собственный хэш, который каким-то образом дает вам разыскиваемого заказ.
Теперь, для решения вашей конкретной проблемы, вы можете просто создать std::map
от вашего std::unordered_map
, и даже с минимальными затратами для вставки (не копии):
#include <iostream>
#include <unordered_map>
#include <map>
#include <functional>
int main()
{
std::unordered_map<int, int> m;
m[5] = 1;
m[4] = 2;
m[3] = 3;
m[2] = 4;
m[1] = 5;
typedef std::reference_wrapper<const int> cref_int;
typedef std::reference_wrapper<int> ref_int;
std::map<cref_int, ref_int> ordered(m.begin(), m.end());
for(auto it=ordered.begin(), ite=ordered.end(); it != ite; ++it){
std::cout << it->second << '\n';
}
}
И гарантирует ли он гарантированный заказ для конкретной реализации хэша? Я сомневаюсь в этом. – jpalecek
@jpalecek: Может быть, вы каким-то образом можете создать алгоритм хэширования, специально подходящий для ваших нужд, который каким-то образом дает желаемый результат? : P Обратите внимание на «как-то». – Xeo
@Xeo: как бы алгоритм хеширования упорядочил встречные хэши? И что происходит, когда контейнер изменяется и перерисовывается? –
Конечно нет. Если вам нужен заказ, используйте обычную карту.
- 1. Будет ли неупорядоченный_мап хорошим выбором?
- 2. Ввод в неупорядоченный_мап unordered_map?
- 3. Можно ли указать принтер на следующую страницу?
- 4. Можно ли указать один цвет на квадрат?
- 5. Можно ли указать параметры TCP на клиенте
- 6. Можно ли указать указатель на ссылку?
- 7. Можно ли указать xmlns локально?
- 8. Pandas rank указать заказ
- 9. Можно ли указать номера JSON?
- 10. Можно ли указать стратегию выписки?
- 11. TextIO.Write.to (..) - можно ли указать сжатие?
- 12. можно указать на конкретный JPanel
- 13. Parse.com отношение объект указать заказ
- 14. Можно ли удалить заказ из Hibernate Criteria?
- 15. Можно ли указать курсор z-index?
- 16. Можно ли «www.mydomain.com/app» указать «www.myapp.heroku.com»?
- 17. Можно ли указать методы self в Swift?
- 18. Можно ли указать событие для запуска?
- 19. Можно ли указать путь в OSX?
- 20. Можно ли указать подкаталог веб-сайта домена?
- 21. Можно ли указать тип массива в AS3?
- 22. Можно ли указать границу в андроидной кнопке?
- 23. Спок: можно ли указать, где создать tempDir?
- 24. before_filter: можно ли указать контроллер для действия?
- 25. Можно ли указать компилятор scala, используемый sbt?
- 26. Можно ли указать переменные страницы JSP?
- 27. Можно ли указать путь eclipse.exe в заголовке?
- 28. Можно ли указать кодировку для элемента?
- 29. Можно ли указать, какие тесты выбрать?
- 30. Можно ли указать размер модальности в опциях
Очевидно, что присвоение имени 'unordered_map' было недостаточным для получения сообщения через ... – Jon
Посмотрите на [Boost.MultiIndex] (http://www.boost.org/doc/libs/1_48_0/libs/multi_index/ DOC/index.html). Я не знаком с этим достаточно, чтобы рассказать вам пример, но я уверен, что решение вашей проблемы где угодно, оно есть. –