Отображение длинного длинного целого на вектор пар - PullRequest
0 голосов
/ 09 марта 2020

В C ++ 14 я пытаюсь использовать карту для хранения значений, к которым мне нужен быстрый доступ.

На самом деле проблема в

  • Мне нужно чтобы сопоставить long long int с векторами, но оно должно содержать 2 значения.

  • Я думаю, что вектор пар подходит для этого.

Пример: 5 будет моим long long int

для 5 -> у меня есть

         1,3

         2,5

         5,4

для 89998 у меня есть

        6,899

        8,8887

        9999,566

и c

unordered_map<long long,vector<pair<int,int>>>mp

Но я не знаю, как получить к нему доступ и пройти его

Вопросы

1.Как добавить эти значения на карту

2.Как мне получить к нему доступ? Пример, если возможно *

1 Ответ

1 голос
/ 09 марта 2020

Ваша настоящая проблема в том, что вы не знаете, как использовать std::unordered_map независимо от вашего варианта использования.

Первое, что вы должны были сделать, это прочитать связанную документацию о std::unordered_map. Это дало бы вам ответ на все ваши вопросы.


Как добавить эти значения на карту?

У вас есть несколько (C ++) 14) способы сделать это:

  • std::unordered_map::insert()
  • std::unordered_map::emplace()
  • std::unordered_map::operator[]()

Примечание: Эти функции не совпадают . Вы должны прочитать документацию о деталях каждой функции (что она делает и как ее использовать).

Как получить к ней доступ?

Вы можете получить доступ к элементам, используя:

  • std::unordered_map::operator[]() ( примечание: Вставит элемент, если он не существует)
  • std::unordered_map::at() ( примечание: сгенерирует исключение std::out_of_range, если оно не существует)

Но я не знаю, как получить к нему доступ и пройти его.

Если вы хотите пройти его, самый простой способ - использовать диапазон для l oop.


Пример:

int main()
{
    using ValueType = std::vector<std::pair<int, int>>;

    // Create the map
    std::unordered_map<long long, ValueType> umap;

    // Fill the map
    umap.emplace(std::make_pair<long long, ValueType>(5,     {{1,   3}, {2,    5}, {5,      4}}));
    umap.emplace(std::make_pair<long long, ValueType>(89998, {{6, 899}, {8, 8887}, {9999, 556}}));

    // Iterate over the map
    for(const std::pair<long long, ValueType> & element : umap)
    {
        std::cout << element.first << " -> " << '[';
        for(const std::pair<int, int> & couple : element.second)
            std::cout << '(' << couple.first << ", " << couple.second << ')';
        std::cout << "]\n";
    }

    return 0;
}

Вывод:

89998 -> [(6, 899)(8, 8887)(9999, 556)]
5 -> [(1, 3)(2, 5)(5, 4)]

Живой пример (C ++ 14)

...