-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 325
|
||||||
1 | ||||||
Std::unordered_multimap<std::string, std::unordered_multimap<int, int>>14.07.2018, 19:02. Показов 2278. Ответов 8
Метки нет (Все метки)
Приветствую. Интересует вопрос, как можно обращаться к контейнеру?
Хотелось бы по map["word"][0], но так не работает. Каким образом можно это сделать?
0
|
14.07.2018, 19:02 | |
Ответы с готовыми решениями:
8
Std::unordered_multimap<std::string, int> map Быстродействие std::unordered_map vs. std::unordered_multimap На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)' |
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
14.07.2018, 19:13 | 2 |
unordered_multimap предназначен для того, чтобы одному ключу соответствовало несколько значений. Соответственно используется find https://en.cppreference.com/w/... timap/find , причём с перебором по итератору всех добавленных значений с данным ключом.
Если на один ключ будет только одно значение, то используй https://en.cppreference.com/w/... rdered_map
0
|
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 325
|
||||||
14.07.2018, 19:30 [ТС] | 3 | |||||
TRam_, Нужно, чтобы соответствовало несколько значений. unordered_map - не подходит.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
14.07.2018, 20:19 | 4 | |||||
Сообщение было отмечено Kenny_Dalglish как решение
Решение
Неправильно.
1
|
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 325
|
|
14.07.2018, 21:22 [ТС] | 5 |
TRam_, Хмм. А, без equal_range можно сделать перебор во вложенном итераторе?
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
14.07.2018, 21:28 | 6 |
А чем такой способ не устраивает? Вроде бы всё логично - на каждый строковый ключ приходится несколько числовых ключей, на каждый из которых приходится по несколько значений. Вот и нужно будет делать 2 уровня переборов, чтобы получить все значения, соответствующие данной паре ключей.
0
|
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 325
|
||||||
14.07.2018, 21:31 [ТС] | 7 | |||||
TRam_, Ну так не сделать полный перебор контейнера. Решил. Может, кому надо будет. Спасибо Вам огромное.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
14.07.2018, 21:42 | 8 | |||||
Если же нужно "хотя бы какое-нибудь значение" для двух ключей, то можно сделать так:
Добавлено через 8 минут Пошаговый перебор данного контейнера по сложности, конечно, будет аналогичен unordered_map::equal_range, так что использование того или другого мало отразится на производительности. Но если б речь шла о контейнере с упорядоченными элементами (например std::multimap), то выбрал бы именно ::equal_range (он был бы быстрее).
0
|
15.07.2018, 13:44 | 9 |
это принцип работы простой двумерной мапы, а не мультимапы.
Я правильно понимаю, что по каждому из ключей должно храниться несколько чисел int Но для того что бы и различать ты зачем-то ввёл вложенность у двух мап как у двумерного массива? ["word"][0] ["word"][1] ["word"][2] Вообще-то, что бы просто хранить много чисел по индексу "word" самой по себе unordered_multimap без добавок Добавлено через 46 минут достаточно
0
|
15.07.2018, 13:44 | |
15.07.2018, 13:44 | |
Помогаю со студенческими работами здесь
9
ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> int to std::string Расстановка девяти чисел (Turbo C) Выводит ошибку using Matrix = std::array<std::array<int, 3>, 3>; и bool NextSet Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |