Как правило, можно использовать кортеж , когда требуется сохранить более двух значений разных типов. Только для двух значений пара - лучший выбор.
В вашем случае то, чего вы хотите достичь, - это список пар слово-значение. Вы можете хранить их в контейнере, как вектор, но вы также можете хранить их в виде пар ключ-значение на карте . Как вы можете видеть при переходе по ссылке, std::map
- это буквально набор объектов std::pair
, а кортежи - это обобщение пар.
Для полноты, если мое понимание цели вашего кода верно, этиявляются дополнениями к вашему коду для хранения каждого кортежа в векторе - объявления,
std::tuple<std::string, int> correct_word = {};
std::vector<std::tuple<std::string, int>> existing_words = {};
изменения в цикле, который сохраняет существующие слова - здесь вы хотите добавить каждый кортеж значение слова в вектор,
if(word_input.length() == check_integrity)
{
// ...
correct_word = std::make_tuple(word_input, getScore(word_input));
existing_words.push_back(correct_word);
// ...
}
.. и, наконец, пример использования вне цикла конструирования:
for (size_t iv=0; iv<existing_words.size(); ++iv)
{
correct_word = existing_words[iv];
std::cout << std::get<0>(correct_word) << ": " << std::get<1>(correct_word) << std::endl;
}
std::cout << counter << std::endl;
Тот же код с картой будет выглядеть так:
Единственным объявлением будет картаот строк до значений (вместо кортежа и вектора кортежей),
std::map<std::string, int> existing_words = {};
В цикле построения вы будете создавать пару карт в одной строке, например:
if(word_input.length() == check_integrity)
{
// ...
existing_words[word_input] = getScore(word_input);
// ...
}
В то время как после создания вы будете получать доступ к элементам карты, используя .first
для слова и .second
для счетчика. Ниже приведен пример печати, в котором также используется цикл for:
for (const auto& correct_word : existing_words)
std::cout << correct_word.first << ": " << correct_word.second << std::endl;
std::cout << counter << std::endl;
Обратите внимание, что карты по умолчанию упорядочены по алфавиту, вы можете указать собственные правила упорядочения, а также использовать неупорядоченную карту если вы не хотите упорядочивать / сортировать.