Обращение к элементу по позиции в map

(Вопрос довольно таки глупый поэтому не бейте) Вот допустим у нас есть самый обычный map:

map<string, int> mymap;

и в нем уже есть 2 элемента(ну или пары) как мне узнать ключ и значение только 2 элемента. Есть что то на подобие:

std::cout << mymap[1].first << " " << mymap[1].second;

Ответы (2 шт):

Автор решения: Zhihar

для словаря такое понятие не очень корректно, однако можно сделать так:

std::map<std::string, int> dict;

dict.insert(std::pair<std::string, int>("a", 1));
dict.insert(std::pair<std::string, int>("b", 2));

int index = 0;
for (const auto& obj : dict)
{
    if (index == 1)
    {
        std::cout << obj.second;
        break;
    }
    index ++;
}

вообще в словаре есть однозначная привязка ключ-значение, а уж как именно расположены ключи - это дело десятое.

если вам как-то хочется иметь доступ по индексу к списку, то

  1. или используйте индекс в качестве ключа

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

P.S.

для словарей ваш вопрос выглядит примерно так: "я ищу второй сайт с информацией о c++"

тут же будет вопрос - "что значит второй сайт", вот вам список сайтов, где есть информация, но ни один из них не имеет своего индекса (нумерацию)

гугл вам выдаст в одном порядке, яндекс - в другом

→ Ссылка
Автор решения: AR Hovsepyan

Если нужен какой то i - тый элемент карты по порядку ключа, то просто находим по соответствующему итератору.

auto It = std::next(mymap.begin(), i);
cout << It->first << '\n' 
    << It->second;
→ Ссылка