В настоящее время я изучаю карты в STL. Я хочу знать, как получить конкретную пару ключ-значение с карты. Например, 3-я пара ключ-значение из карты ниже. 'C'-> 1
'A'-> 1
'B'-> 1
'C'-> 1
'D'-> 1
'E'-> 2
2 ответа
Да, мы можем получить доступ к «третьей паре ключ-значение» карты, но это не очень просто. Нам нужно получить итератор в начале карты и затем продвинуть его дважды (обратите внимание, что в более общем коде вы должны проверить, что карта имеет соответствующий размер, прежде чем делать что-то подобное)
std::map<char, int> my_map;
my_map['C'] = 3;
my_map['A'] = 1;
my_map['B'] = 2;
auto begin = my_map.begin();
std::advance(begin, 2);
std::cout << begin->first << " : " << begin->second << std::endl;
Выход:
С: 3
Живая демонстрация
Обратите внимание, что третий элемент - это фактически первая пара ключ-значение, которую мы вставили. Это потому, что ключи вставляются в отсортированном порядке.
Если я вас правильно понял, вам нужно что-то вроде
#include <iostream>
#include <map>
#include <iterator>
int main()
{
std::map<char, unsigned int> m =
{
{ 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
};
auto it = std::next( std::begin( m ), std::min<decltype( m )::size_type>( m.size(), 2 ) );
if ( it != std::end( m ) )
{
std::cout << it->first << ": " << it->second << '\n';
}
return 0;
}
Вывод программы
C: 1
То есть вы можете использовать операции с итераторами.
Или, может быть, вам нужно использовать только метод find
класса, как, например,
#include <iostream>
#include <map>
#include <iterator>
int main()
{
std::map<char, unsigned int> m =
{
{ 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
};
auto it = m.find( 'C' );
if ( it != std::end( m ) )
{
std::cout << it->first << ": " << it->second << '\n';
}
return 0;
}
Снова вывод программы
C: 1
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.