Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Помогите плс. разобраться с коллекциями в частности с map и поиском в нем. Итак, создаю и заполняю map: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вопросы: 1. как можно просто по ключу получить значение? 2. как с максимальной скоростью получить значение? (как использовать std::binary_search для std::map - если это возможно? ) 3. как в линуксе получить системное время в миллисекундах? (хочу замерить время выполнения кода) Модератор: не забывай выделять код тэгом SRC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 22:27 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
а если сделать? Код: plaintext 1. может 117.55 на самом деле не совсем 117.5 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 06:24 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Присвоить значение: Код: plaintext 1. Проверить есть ли значение: Код: plaintext 1. Получить значение: Код: plaintext 1. В твоем примере главный косяк в том что key имеет тип double, т.к. для double нельзя делать проверку на равенство без учета погрешности. А мап по умолчанию использует именно равенство, т.е. тебе надо еще реализовать свой компаратор binary_search для мап не нужен, поиск изначально оптимизирован. Замеряй с помощью стандартного clock() - в линуксе дает время сколько молотил процессор. Про мап (и не только) тут с примерами http://www.cplusplus.com/reference/map/map/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 08:45 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Время можно и через std::chrono померить, а вот с double ключами даже и предложить-то нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 10:53 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
wstВремя можно и через std::chrono померить, а вот с double ключами даже и предложить-то нечего. Ну как нечего ? Можно предложить int или long или long long ключи с отмасштабированными соотв. образом значениями. (*100, *1000 и так далее.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 11:20 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
MasterZivwstВремя можно и через std::chrono померить, а вот с double ключами даже и предложить-то нечего. Ну как нечего ? Можно предложить int или long или long long ключи с отмасштабированными соотв. образом значениями. (*100, *1000 и так далее.) диапазон значений double выходит далеко за long long. Это ведь числа с порядком. Оно даже целое может иметь длинный хвост из нулей. А если есть дробная часть, то на самом деле может быть много девяток или единичка на хвосте из нулей: 123e45 1.2999999999999998 -> 1.3 1.3000000000000001 -> 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 11:33 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
mcureenabдиапазон значений double выходит далеко за long long. Это ведь числа с порядком. Оно даже целое может иметь длинный хвост из нулей. Это понятно, но в мапе не может быть ключа с бесконечным числом значений всё равно. Предполагается, что ТС сознательно ограничит точность входных данных у себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 13:53 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Ключ-то может быть, вопрос лишь в том удастся ли им воспользоваться как задумано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 14:32 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Спасибо всем откликнувшимся, про ключ типа double понял что его нельзя использовать, а если этот ключ привести к стрингу или массиву символов то должно работать? (разумеется для извлечения значения придется снова ключ приводить к нужному типу, это уже вопрос теории а не для реального использования map) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 14:51 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Число разных значений некой величины из N бит в точности равно 2^N. double и long long имеют одинаковый размер (64 бита), но правила работы с целым числом просты, а с вещественным - не тривиальны. Возникает вопрос - зачем усложнять себе жизнь и использовать вместо ключа что-то отличное от (длинного) целого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 15:32 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
Alex_KaПомогите плс. разобраться с коллекциями в частности с map и поиском в нем. Итак, создаю и заполняю map: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вопросы: 1. как можно просто по ключу получить значение? используй lower_bound как то так Код: plaintext 1. 2. ну и не забывай проверять итераторы на end() и begin() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 15:33 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
YesSqlиспользуй lower_bound осторожно! какой из них больше? 1.2999999999999998 -> 1.3 1.3000000000000001 -> 1.3 можно дополнительно взять предыдущий ключ и в итоге выбрать тот, что ближе к искомому. а если точность ключей изначально ограничена, т.е. они уже округлены, положим до 5 разрядов, то можно искать например key*0.99999999 , т.е. значение чуть меньше нужного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 15:56 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
mcureenabYesSqlиспользуй lower_bound осторожно! какой из них больше? 1.2999999999999998 -> 1.3 1.3000000000000001 -> 1.3 можно дополнительно взять предыдущий ключ и в итоге выбрать тот, что ближе к искомому. а если точность ключей изначально ограничена, т.е. они уже округлены, положим до 5 разрядов, то можно искать например key*0.99999999 , т.е. значение чуть меньше нужного. Код: plaintext 1. через lower_bound получаем два ближайших и решаем что подходит а что нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 16:04 |
|
||
|
std::map и поиском в нем.
|
|||
|---|---|---|---|
|
#18+
mcureenabа если точность ключей изначально ограничена, т.е. они уже округлены, положим до 5 разрядов, то можно искать например key*0.99999999 , т.е. значение чуть меньше нужного. если точность ключей ограничена то их значения детерминированы, и никаких специальных ухищрений не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39107233&tid=2018733]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 458ms |

| 0 / 0 |
