Ассоциативные контейнеры в с++

203
10 апреля 2018, 05:26

Здравствуйте! У меня возникла следующая проблема, не могу подобрать контейнер для хранения переменных и их значений. К слову, map подходил почти идеально, но он сортирует элементы, что для меня совершенно не подходит. Я пишу парсер математических выражений и использую поиск по имени переменной, чтобы получить ее значение. Было бы идеально, если бы существовал контейнер наподобие map который не сортируется автоматически (то есть контейнер по типу ключ->значение, но без автоматической сортировки). Я уже себе всю голову поломал, и на ум приходят только костыли. Какие могут быть решения?

Answer 1

unordered_map больше подойдет, как уже заметил пользовательHarry Для хранения имен переменных и их значений использование map не совсем логично, поскольку вам не нужно сортировать имена переменных по лексикографическому порядку. Какая переменная появляется раньше другой, не должен зависить от того, какое имя она имеет. Если вам нужен какой то порядок, то нужно брать другой контейнер, поскольку поиск в unordered_map осуществляется по возвращенному значению хэш функции, а в данном контейнере, для каждого ключа это значение уникально, и проверяется ключ только на равенство.

Для определенного порядка, вы можете брать любой контейнер с типом элементов std::pair<std::string, double >.

Для примера:

using P = std::pair<std::string, double >;
std::vector<P> vp;
vp.emplace_back(make_pair("s", 1));
vp.emplace_back(make_pair("d", 2.1));
vp.emplace_back(make_pair("f", 3.2));
vp.emplace_back(make_pair("g", 5.6));
for (auto& p : vp)
    cout << p.first <<'\t' << p.second <<'\n';

Вы можете использовать любой из данных

cout << vp[1].first <<'\t' << vp[1].second;
READ ALSO
system(&ldquo;&hellip;&rdquo;) В C++ [требует правки]

system(“…”) В C++ [требует правки]

Напишите мне несколько примеров функции system()

196
Привидение к неполному типу void [дубликат]

Привидение к неполному типу void [дубликат]

На данный вопрос уже ответили:

225
Генерация документации Vue

Генерация документации Vue

Проект построен на Vue компонентахВ каждом компоненте есть свои методы и т

193
Добавать таймер в код javascript

Добавать таймер в код javascript

Необходимо добавить таймер в так, чтобы он начинал работать при нажатии на первую карточку и заканчивал работать, если игрок выиграл или...

198